ggplot2nin sunduğu zengin görselleştirme araçlarını tam güç kullanmak için kitaplığın grafik gramerine girmek ve bazı mekanizmaları keşfetmek gerekiyor. Bu kitaplığın basit kullanımıyla başladığımız yazılara ggplot2’nin kaputunu aralayarak devam ediyoruz. Bu uzun bir yazı olacak ama bölmek doğru olmazdı.

ggplot2 kitaplığındaki quickplot() fonksiyonu R’daki klasik plot() fonksiyonuna olabildiğince benzetilerek ve kullanıcıların yeni kitaplığa geçişini kolaylaştırmak için tasarlanmıştır. quickplot() sözdizimi basitliğinin bir bedeli olarak bu parametreleri bizden gizliyordu. Ancak ggplot2‘nin tüm gücünü açığa çıkartabilmek için kendine özgü grafik yaklaşımına, katmanlarına ve bunlara karşılık gelen fonksiyon tiplerine yakından bakmak gerekiyor.

ggplot2 ve grafik grameri

ggplot2 kitaplığının tasarımındaki temel bir unsur grafik grameridir (bkz: @wilkinson2012grammar, Wilkinson, L. (2012). The grammar of graphics. In Handbook of Computational Statistics (pp. 375-414). Springer, Berlin, Heidelberg.). Bu gramere göre bir grafik katmanlardan birleştirilerek oluşturulmaktadır. Kitaplığın temel fonksiyonu olan ggplot() boş bir grafik oluşturarak bütün grafiklere başlangıç noktası oluşturur:

require(ggplot2)
ggplot() 

Onun üzerine gelen katmanlar toplama işlemi ile birleştirilir. Aşağıdaki örnekte oluşturulan boş grafik üzerine sadece eksenlere ve grafiğin üstüne başlık eklemekle yetinmektedir. Ayrıca bu örnekte genel çizim temasını belirlemek için theme_...() fonksiyonlarından birini kullandık :

ggplot() +
  theme_classic()+
  ggtitle("Boş grafik") +
  xlab("x ekseni") +
  ylab("y ekseni")

ggplot2 kullanımında yaygın bir pratik bu fonksiyona ilk parametre olarak veri setinin verilmesidir. Aşağıdaki örneklerde kitaplıkla birlikte gelen veri setlerinden biri olan elmasların özellikleri ve fiyatlarıyla ilgili “diamonds” veri seti kullanılacaktır. Öncelikle bu veri setini incelemenizde yarar var. Veride elmasn ağırlığı (karat cinsinden) ve fiyatının yanısıra rengi, şeffaflığı, kesim tipi olarak üç sıralı kategorik değişken ve elmas boyutları bulunuyor :

summary.default(diamonds)
##         Length Class   Mode   
## carat   53940  -none-  numeric
## cut     53940  ordered numeric
## color   53940  ordered numeric
## clarity 53940  ordered numeric
## depth   53940  -none-  numeric
## table   53940  -none-  numeric
## price   53940  -none-  numeric
## x       53940  -none-  numeric
## y       53940  -none-  numeric
## z       53940  -none-  numeric

Aşağıdaki örnekte kullanılacak veriseti belli, tema değiştirilmiş, ama bir grafiğe dönüşmemiştir. Önceki örnekteki gibi boş bir grafik çıkartır:

ggplot(data=diamonds) +
  theme_dark()+
  ggtitle("Boş grafik") +
  xlab("x ekseni") +
  ylab("y ekseni")

Bu boş grafiğin kullanışlı hale gelmesi için üstüne eklemeler yapmamız gerekiyor. Hemen her ggplot grafiğinde iki temel katman bulunmaktadır (diğer katmanlara sonra bakacağız):

estetik katmanı: Bu katman eldeki verilerin grafik geometrisine nasıl ilişkilendirileceğini belirler. Bu katman aes() fonksiyonu ile oluşturulur. Tek başına bir görsel karşılığı yok gibidir:

ggplot(data=diamonds) +
  aes(x=carat, y=price) +
  ggtitle("Sadece estetik olan grafik") 

Henüz bir grafik elde etmedik. Ama dikkat ederseniz çizimde x ve y ekseni belirlenen veriye göre etiketlenmiş (xlab ve ylab kullanmamamıza rağmen) ve ölçekler eksenlere yerleştirilmiştir. Veriyi grafiğe yansıtmak için daha fazlası gerekiyor.

geometri: bu katman verinin çizime nasıl yansıtılacağını belirler. ggplot2 terminolojisinde grafik çizime yansıtılan grafik bileşenlere “geometriler” adı verilmektedir.

İlk örneğimizi iki boyutlu ve ikisi de sayısal veriler için kullanmaya uygun “nokta/point” geometrisi ile tamamlayalım. Bu geometri her ver noktasına birbiriyle eşdeğer noktalar koyuyor:

ggplot(data=diamonds) +
  aes(x=carat, y=price) +
  geom_point() +
  ggtitle("Örnek tam grafik: nokta geometrisi") 

“point” veya diğer geometriler öntanımlı parametreleri değiştirilerek çağrılabilirler. Aşağıdaki örneğe dikkat ediniz: daha önceki bölümde quickplot() sözdizimi ile yapamayacağımız bir alana giriyoruz. Örneğimizde öntanımlı çizimde üstüste binen noktaları hem küçük bir sembolle (shape=”.” parametresi) hem de şeffaflaştırarak (alpha=0.25 parametresi) çizeceğiz. Bu parametreleri quickplot() ile ifade etmek mümkün olmazdı:

ggplot(data=diamonds) +
  aes(x=carat, y=price) +
  geom_point(shape=".", alpha = 0.25) +
  ggtitle("Örnek tam grafik: modifiye nokta geometrisi") 

Estetik eşleştirmeler ve ikiden fazla veri değişkeni kullanımı

Daha önceki bölümde quickplot() ile yaptığımıza benzer şekilde üçüncü ve dördüncü değişkenleri görseldeki veri noktalarının boyutu ve rengini kullanarak grafikte ifade edebiliriz. ggplot2 grafik gramerinde bu işlem estetik katmanında, yani aes() fonksiyonu ile yapılmaktadır. Bu fonksiyon x ve y değişkenleri dışında birçok parametre kabul edebilir. Bu parametrelerin seçilecek geometri ile de uyumlu olması gerekecektir. Aşağıdaki ilk örneğimizde “nokta/point” geometrisi ile uyumlu olan estetik eşleştirmeler kullanılıyor: elmasın kesim niteliği (“cut” değişkeni) “renk/color” estetiğine, kesimin genişlik-derinlik oranı ise (“depth” değişkeni) nokta “büyüklüğü/size” estetiğine eşleştirilmektedir.

ggplot(data=diamonds) +
  aes(x=carat, y=price, color=cut, size=depth) +
  geom_point(alpha=0.50) +
  xlab("Ağırlık (karat)")+
  ylab("Fiyat")+
  ggtitle("Elmaslar: dört değişken ile") 

Bu grafiğe bir de metin/”label” geometrisi eklersek estetik eşleştirmede de bunun karşılığı olması gerekir. metinlerin grafiğe aktarımı görece zaman alan tipografik işlemler gerektirdiğinden ve metinlerin üstüste basımı sorunlu olduğundan örnekte veri setinin sadece %5’lik bir rasgele örneklemini kullanıyorum (dplyr paketinden sample_frac() fonksiyonu ile):

require(dplyr)
ggplot(data=sample_frac(diamonds,0.05)) +
  aes(x=carat, y=price, color=cut, size=depth, label=clarity) +
  geom_label() +
  xlab("Ağırlık (karat)")+
  ylab("Fiyat")+
  ggtitle("Elmaslar: dört değişken ile") 

Diğer örneklerimize geçmeden bir noktaya dikkat çekmekte yarar var: Estetik katmanının ana fonksiyonu olan aes() fonksiyonunun bir özelliği parametrelerinin “alıntı” tipi olması ve ggplot’un genel çerçevesi içerisinde yorumlanmasıdır. Bir önceki örneğimizde aes(x=carat, y=price) ifadesine dikkat edin: carat ve price değişkenlerinin hangi veri setinden geldiği ifade edilmemiştir; bu şekilde tek başlarına anlamlandırılamazlar. Ancak aes() bunları belirli bir yere kadar “alıntı” yani “metin” olarak taşır ve ancak ggplot çiziminin bütün parçaları birleşirken yorumlar. Dolayısıyla çizimin ilk komutu olan ggplot(data=diamonds) ifadesi ile birlikte yorumlandığında anlam kazanır.

aes() fonksiyonunun bu özelliğine biraz aşağıdaki “stat ile istatistik infografiler” bölümünde geri döneceğiz: bu özellik sayesinde grafiğin üretilmesi sırasında hesaplanan bazı ara istatistik değerleri de estetik eşleştirmelerde kullanabileceğiz. Bir başka deyişle fonksiyonu çağırdığınız anda varolmayan, ama grafik üretilirken varolacak bazı değişkenleri estetik eşleştirmelerde kullanacağız.

Geometrilerin birleştirilmesi

ggplot2 kitaplığındaki geometri ve diğer katman fonksiyonlarının kapsamlı bir listesine referans dökümantasyonundan ulaşabilirsiniz. Ayrıca bu fonksiyonlarla ilgili bir özet/kopya sayfası bulunuyor. Kopya sayfası geometrileri tek, iki, veya daha fazla değişkene uygun geometriler olarak ayırdığı için başlangıçta çok yararlı olabilir.

ggplot2 katmanlarının birleştirilmesi sırasında birden fazla geometrinin kullanımı grafiğin infografik içeriğini zenginleştirdiği için oldukça sık başvurulan bir yöntemdir. Elmas veriseti örneğinde verinin çok uzun olduğu ve dolayısıyla nokta geometrisinde noktaların üstüste bindiğini farkedersiniz. “Modifiye nokta geometrisi” örneğimizde noktaları küçülterek ve biraz şeffaflaştırarak bu sorunu kısmen çözmüştük. Veri noktalarının nerelerde yoğunlaştığını daha görünür hale getirmek için aşağıdaki örnekte nokta geometrisinin üzerinde `ggplot2’nin iki boyutlu geometrilerinden biri olan ve yoğunluğu altıgen alanlar (hexagon’lar) şeklinde ifade eden “hex” geometrisini ekleyeceğiz. Yine işlemi hızlandırmak için verinin küçük bir örneklemi ile çalışıyorum (data=sample(diamonds,1000))

ggplot(data=sample_n(diamonds,1000)) +
  aes(x=carat, y=price) +
  geom_point(shape=".", alpha = 0.5) +
  geom_hex()+
  ggtitle("Elmaslar: Nokta ve altıgen yoğunluk geometrisi birarada") 

Her geometriye özel estetik eşleştirmesi

Bu bölümde ele alacağımızı sorunu anlamak için önce “yoğunluk” geometrisinin kullanımını görelim:

ggplot(data=sample_n(diamonds,1000)) +
  aes(x=carat, y=price) +
  geom_point(alpha=0.10) +
  geom_density2d()+
  ggtitle("Elmaslar: Nokta ve yoğunluk geometrisi birarada") 

Şimdi bu örnekteki estetik eşleştirmeye küçük bir ekleme yapacağız. Aşağıdaki örnekte sadece aes(..) fonksiyonunda “color=color” estetik eşleştirmesi ekliyoruz, yani elmas rengini grafiğe yansıtmak niyetindeyiz. Bunun sonucunda ortaya çıkan grafiğe bir bakalım:

ggplot(data=sample_n(diamonds,1000)) +
  aes(x=carat, y=price, color=color) +
  geom_point(alpha=0.10) +
  geom_density2d()+
  ggtitle("Elmaslar: Nokta ve altıgen yoğunluk geometrisi birarada") 

Bizim niyetimiz nokta geometrisindeki noktaların renklendirilmesi idi. Ancak renk estetiği onun yerine yoğunluk geometrisinin kontur çizgilerinde renklendirme yaptı. İşte böyle bir durumda geometriye özel bir estetik eşleştirme yapmak gerekecektir. Bunu yapmak için renk estetiğini “genel” aes() fonksiyonundan çıkartıp nokta geometrisinin içerisinde çağıracağız:

ggplot(data=sample_n(diamonds,1000)) +
  geom_point(aes(x=carat, y=price, color=color),alpha=0.25) +
  geom_density2d(aes(x=carat, y=price))+
  ggtitle("Elmaslar: Geometriye özel estetik eşleştirme") 

Ayni yöntemle her geometriye uygun estetik eşleştirmeler tanımlayabilirsiniz. Örneğin noktaların rengini elmasın rengiyle eşleştirmenin yanısıra yoğunluk geometrisindeki kontur çizgilerinin de elmas rengine göre ayrıştırarak koyabiliriz. Bunun için geom_density2d() fonksiyonunun içine de bir estetik eşleştirme ekliyoruz:

ggplot(data=sample_n(diamonds,1000)) +
  aes(x=carat, y=price) +
  geom_point(aes(color=color),alpha=0.25) +
  geom_density2d(aes(color=cut))+
  ggtitle("Elmaslar: Geometriye özel estetik eşleştirme") 

Diğer katmanlar: ‘stat’ ile istatistik infografiler

Yukarıdaki bölümlerde örneklediğimiz bazı geometriler, örneğin yoğunluk/density geometrisinin çizilebilmesi için ham veri noktalarının dışında hesaplar yapılması gerekir. Yoğunluk geometrisinde veri yoğunluğuna göre yoğunluk kontur çizgilerinin nereden geçeceği hesaplanmalı, kaç yoğunluk seviyesi olacağı belirlenmelidir. Bu hesaplamaların yapılması için her geometrinin bir de öntanımlı istatistik fonksiyonu otomatik olarak çağrılmaktadır. “Yoğunluk” geometrisi için bu fonksiyon stat_contour() fonksiyonudur. Bu ve diğer bilgilere geometri fonksiyonunun yardım sayfasından ulaşılabilir.

Her stat_...() fonksiyonu ham veriden yeni bazı istatistikler, yani yeni veriler üretir. Bu üretilmiş istatistiksel verileri de estetik eşleştirmede kullanabiliriz.

Burada farklı bir veri seti ile örnekleyelim: R ile beraber gelen veri setlerinden faitful gayser’inin patlama süreleri ve bir sonraki patlamaya olan süreyi gösteren veri setini önce temel birkaç şekilde grafiğe dökeceğiz. Sonra yeni birşeyler deneyeceğiz:

m <- ggplot(faithful, aes(x = eruptions, y = waiting)) +
 geom_point() 

m #grafiği göster

Şimdi buna yoğunluk geometrisi ekleyeceğiz. Bu komut ilk bakışta şaşırtıcı gelebilir, ama ggplot2 grafik komutlarında toplama, +, işlemini zaten kullanıyorduk. Burada grafiği bir değişkene atarak aynı işlemi yapıyoruz:

m + geom_density2d()

Buraya kadar yeni birşey yok. Eğer yoğunluk geometrisinden biraz daha fazlasını istersek bu kez bazı istatistiklerin hesaplanması gerekecektir. İşte bu noktada bir geom_...() fonksiyonu ile onun öntanımlı istatistiklerini kullanmak yerine istediğimiz veriyi üreten stat_...() fonksiyonunu ve bir geometriyi birleştirmek gerekebilir. Aşağıdaki örnekte yoğunluk alanlarını kontur çizgileri yerine renklendirilmiş polygon alanlarla gösteriyoruz. Örnekte daha önce görmediğimiz bir notasyon var: dolgu rengi (“fill”) olarak “..level..” isimli bir değişken kullanıyoruz. Bu değişken ismindeki özel notasyon ggplot2 sistemine değişkeni verilen veri setinde değil de stat_ fonksiyonu tarafından üretilen verilerde aramasını söylüyor. Aynı şekilde belirli bir stat fonksiyonunun ürettiği değişkenlere ulaşılabilir:

m + stat_density_2d(aes(fill = ..level..), geom = "polygon")

Üstteki sonuç biraz beklentinin altında. Bunun sebebi eş yoğunluk hesaplamasının kendine özgü algoritması. Durumu düzeltmek için grafiğin marjinlerini biraz arttırmayı deneyebiliriz. bunun için xlim ve ylim fonksiyonlarını kullanıyoruz:

m <- ggplot(faithful, aes(x = eruptions, y = waiting)) +
 geom_point() +
 xlim(0.5, 6) +
 ylim(40, 110)

m + stat_density_2d(aes(fill = ..level..), geom = "polygon")

Son olarak geometrilerin sıralamasının etkisini de görelim. Nokta geometrisini en son çizdirerek noktaların altta kalmasını engelleyebiliriz:

m <- ggplot(faithful, aes(x = eruptions, y = waiting)) +
 stat_density_2d(aes(fill = ..level..), geom = "polygon")+
 geom_point() +
 xlim(0.5, 6) +
 ylim(40, 110)

m #grafiği göster

Bir ggplot2 grafiğinin üretilme aşamaları

ggplot2 grafikleri çizilirken kullanılan veri setine ilaveten çok miktarda veri üretilir. Bunlar çizim ile ve kullanılan geometri ile ilgilidir. Bir tanesini yukarıdaki bölümde son örnekte gördük: “level” verisi yoğunluk geometrilerinde eş-yoğunluk seviyelerini belirtiyor.

Bir grafik üretilirken aşama aşama yeni hesaplamalar yapılmaktadır. Bu konunun detaylı anlatımı için estetik değerlendirme sayfasını incelemenizi öneririz. Yapılan hesaplamalar ve ismi zikredilen değişkenlerin ne olduğunun belirlendiği değerlendirme adımı üç aşamada gerçekleşir:

  • İlk aşamada kullanılan veriseti içerisinde değerlendirme yapılır. Örneğin aes(x=price, ...) ifadesinde kullanılan, veri setinin bir değişkeni olan diamonds$price değişkeni bu aşamadan başlayarak anlaşılabilmektedir.
  • İkinci aşama istatistiklerin üretilmesi aşamasıdır. Örneğin yoğunluk geometrisi veya istatistiği kullanılacaksa bunun ürettiği belirli değişkenler olacaktır: kaç yoğunluk seviyesi kullanılacağı (“level” değişkeni) gibi. Bu değişkenlerin yorumlanması için ikinci aşamanın beklenmesi gerekir. Bu gerklilik iki şekilde ifade edilebilir: ..level.. benzeri bir notasyonla, veya bunu açık olarak yapan after_stat() fonksiyonu kullanılarak. Dolayısıyla yukarıdaki bölümde “..level..” notasyonu ile yapılan örnek after_stat() ile şu şekilde yapılabilir:
ggplot(faithful, aes(x = eruptions, y = waiting)) +
  xlim(0.5, 6) +
  ylim(40, 110) +
  stat_density_2d(aes(fill = after_stat(level)), geom = "polygon")+
  geom_point()

  • Üçüncü aşama ise ölçekleme aşamasıdır. Buna bir örnek histogram çizerken çizilen barların yüksekliğidir. Bu yükseklik veri setinden gelmez. İkinci aşamada histogram geometrisinin gerektirdiği istatistikler hesaplanırken her aralıktaki değerlerin sayımı yapılır. Üçüncü aşamada ise bu sayımların grafikteki eksenlerde ne kadar yüksekliğe denk geleceği, yani ölçek hesaplanır. Benzer şekilde çizimdeki renkler, vb. bu aşamada hesaplanır. Örnek olarak binek araç veri setinde araç sınıfının renk olarak kullanıldığı durumu düşünelim. Bu örnekte whisker/boxplot’a alternatif olarak violin geometri denilen verilerin saçılımını daha iyi gösteren bir geometri kullanacağız:
ggplot(mpg, aes(x=class, y=hwy)) +
  geom_violin(aes(color=class))

Bu grafikte hangi araç sınıfının hangi renkte gösterileceği üçüncü aşama olan ölçek aşamasında ggplot tarafından seçildi. Şimdi de dolgu rengi olarak “seçilmiş” rengin biraz şeffafını kullanmak istediğimizi düşünelim. İşte böyle bir örnekte “colour/renk” estetiğinin ölçeklendiği aşamaya referans vermek için after_scale() fonksiyonunu kullanacağız

ggplot(mpg, aes(class, hwy)) +
  geom_boxplot(aes(colour = class, fill = after_scale(alpha(colour, 0.4))))

Çok boyutlu verilerde facet kullanımı ile çoklu grafikler

Kimi durumlarda kategorik birkaç değişkeni grafiğe bindirdikten sonra daha fazlasını eklemek görüntü kalitesini kötü etkileyecektir. facet mekanizması bir kategorik değişkenin farklı birkaç değeri için ayrı grafikleri yan yana üreterek size grafik kalitesini bozmadan bir veya iki değişken daha kullanma imkanı verir. Bunu binek araç veriseti ile örnekleyelim. Örneğimizde araçların şehir içi ve şehirler arası yakıt verimliliğini litre başına kilometre cinsinden x ve y eksenlerine, araç sınıfını renge, ve silindir hazmini nokta boyutuna estetik eşleştirme yaptıktan sonra vites tipi (“drv” değişkeni) değişkenini de facet olarak ekliyoruz. Facet mekanizması veri değişkenlerini tanımak için vars() fonksiyonuna ihtiyaç duymaktadır:

ggplot(mpg) +
  aes(hwy, cty, color=class, size=displ) + 
  geom_point() + 
  facet_wrap(vars(drv))

Facet alternatiflerinden biri olan facet_grid() kullanırsanız satırları bir değişkene, sütunları ise başka bir değişkene eşleştirerek iki değişken birden ekleyebilirsiniz. Örneğin yakıt türü değişkenini (“fl”) ekleyelim. Biraz kalabalık bir görsel elde ediyoruz, ama istediğimiz birçok kırılımı bir arada göstermiş oluyoruz. Toplamda 6 değişkeni birden tek bir grafiğe dökmüş olacağız:

ggplot(mpg) +
  aes(hwy, cty, color=class, size=displ) + 
  geom_point() + 
  facet_grid(rows=vars(fl), cols=vars(drv))

Regresyon geometrileri

Bir önceki bölümde quickplot() ile regresyon geometrilerini kullanmıştık. Ancak bu kullanım üzerindeki kontrolümüz sınırlı idi. Regresyon geometrileri dağılım ve tahminleme aralıklarını göstermek için pek çok seçenek sunar. Bu bölümde bu çeşitliliğe bir göz atacağız.

Bu bölümde ggplot2 ile beraber gelen veri setlerinden elmas fiyatları verilerini kullanacağız. Öncelikle fiyat ile elmas ağırlığı (karat cinsinden) arasındaki ilişkiyi doğrusal regresyon ile modelleyelim. Bütün örneklerde örneği hızlandırmak için bu büyük verisetinin küçük bir örneklemini kullanacağım:

m<-lm(price ~ carat, data=sample_n(diamonds,1000))
summary(m)
## 
## Call:
## lm(formula = price ~ carat, data = sample_n(diamonds, 1000))
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -7475.5  -971.3   -14.3   629.4  9909.5 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -2412.4      102.6  -23.52   <2e-16 ***
## carat         8012.3      109.9   72.89   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1628 on 998 degrees of freedom
## Multiple R-squared:  0.8419,	Adjusted R-squared:  0.8417 
## F-statistic:  5313 on 1 and 998 DF,  p-value: < 2.2e-16

Şimdi doğrusal regresyon bulgularını grafikte bir a-b çizgisi eklemek için kullanacağız. Regresyon çizgisi geom_smooth() geometrisi ile eklenir. Ancak bu geometrideki “method” parametresi hangi regresyon tipinin/fonksiyonunun kullanılacağın belirler. İlk örneğimizde doğrusal regresyon karşılığı olarak lm fonksiyonunu kullanacağız:

ggplot(sample_n(diamonds,1000)) +
  aes(x=carat, y=price) +
  geom_point() +
  geom_smooth(method="lm")

Dikkat ederseniz fiyat-ağırlık ilişkisi tam olarak bir doğru değil. Ağır elmaslar daha nadir olduğu için ağırlığıyla ornatısız derecede yüksek fiyata sahip. Doğrusal değil de polinom bir regresyon bunu daha iyi modelleyebilir:

m<-loess(price ~ carat, data=sample_n(diamonds,1000))
summary(m)
## Call:
## loess(formula = price ~ carat, data = sample_n(diamonds, 1000))
## 
## Number of Observations: 1000 
## Equivalent Number of Parameters: 4.97 
## Residual Standard Error: 1440 
## Trace of smoother matrix: 5.43  (exact)
## 
## Control settings:
##   span     :  0.75 
##   degree   :  2 
##   family   :  gaussian
##   surface  :  interpolate	  cell = 0.2
##   normalize:  TRUE
##  parametric:  FALSE
## drop.square:  FALSE

Doğrusal ve polinom regresyonu karşılaştırırsanız ikincide hataların (residual error) azaldığını görebilirsiniz. Şimdi bu yeni, modeli görselleştirebiliriz:

ggplot(sample_n(diamonds,1000)) +
  aes(x=carat, y=price) +
  geom_point(alpha=0.20) +
  geom_smooth(method="loess")

ggplot eklentileri

ggplot2‘nin sunduğu grafik grameri altyapısı pek çok yeni paketin oluşmasını sağlamıştır. Bu paketler in tamamı ggplot2 web sitesindeki eklenti galerisinde bulunabilir. Burada size şu linkte de özetlenen bazı paketleri tanıtmakla yetineceğiz:

  • ggradar: karşılaştırmalı analize izin veren radar grafiklerinin oluşturulmasını sağlar. Aşağıdaki örnekte arabalar verisetinden seçilen “group” değişkeni ekseninde tüm diğer değişkenler açısından karşılaştırma yapan bir radar grafiği oluşur:
require(ggradar) #kurmak için:
                #devtools::install_github("ricardo-bion/ggradar")
require(dplyr)
require(scales)
require(tibble)

mtcars_radar <- mtcars %>% 
  as_tibble(rownames = "group") %>% 
  mutate_at(vars(-group), rescale) %>% 
  tail(4) %>% 
  select(1:10)
ggradar(mtcars_radar)

  • patchwork paketi birden fazla grafiğin birleştirilmesini sağlar. Bu paket teker teker oluşturulan normal ggplot2 grafiklerinin | ve / gibi operatörleri kullanan belirli bir söz dizimi ile altlı-üstlü ve yan yana döşenmesine izin verir:
library(ggplot2)
library(patchwork) # Kurmak için
              # devtools::install_github("thomasp85/patchwork")

p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp))
p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
p3 <- ggplot(mtcars) + geom_smooth(aes(disp, qsec))
p4 <- ggplot(mtcars) + geom_bar(aes(carb))

(p1 | p2 | p3) /
      p4

Eklentiler arasında grafiği animasyona çevirmekten dendrogram oluşturmaya kadar pek çok farklı eklenti bulunuyor. Hepsi de ana ggplot2 paketinin grafik kalitesini paylaşıyor. Keyifli kullanımlar.