R’ın yeni nesil görselleştirme kitaplığı ggplot2 güncel ihtiyaçlara uygun kalite ve özellikte grafikler üretebiliyor. Gelecek yazıda kitaplığın teknik altyapısına dalmadan önce bu yazıda basit ve hızlı bir kullanım sağlayan quickplot() fonksiyonu ile çizim özelliklerini keşfedeceğiz.

quickplot() ile grafikler

Az miktarda yönerge ile çalışmasına rağmen quickplot() öntanımlı davranışı ek parametrelerle değiştirilebilir. Daha da önemlisi grafik çizimde çok farklı, çağdaş infografik geometriler kullanabilmektedir. ggplot2 dilinde geometri verinin nasıl bir çizim tekniğiyle ifade edildiğini belirtir. Örneğin histogramın çizim şeklini geom parametresiyle hemen değiştirebiliriz. Aşağıda bir önceki bölümde kullanılan swiss veri seti ile yapılan örnekte quickplot()un tek değişkenli görselleştirmeler için öntanımlı olan “barplot” geometrisi yerine “dotplot” adı verilen bir görüntüleme kullanılmıştır:

require(ggplot2)
quickplot(x=Fertility, data=swiss, geom="dotplot")

ggplot2’de geometri seçenekleri oldukça fazladır. Örneğin geleneksel boxplot çizilebilir:

quickplot(x=Fertility, data=swiss, geom="boxplot")

ggplot2 çizim yaklaşımı R’daki geleneksel çizim fonksiyonlarına görünüşte benzer bir şekilde grafiğe yeni yeni katmanlar eklemeye izin verir. quickplot() fonksiyonunun geom parametresine tek bir geometri ismi yerine birden fazla geometri ismini bir liste olarak (c() fonksiyonu ile oluşturarak) verebilirsini. Böyle bir durumda geometriler verilen sırada üstüste bindirilerek çizilecektir. Örneğin boxplot ve dotplot geometrilerini beraber kullanabiliriz:

quickplot(x=Fertility, data=swiss, 
          geom=c("boxplot","dotplot"),
          main="İki geometri üstüste çizim")

Böyle bir görselleştirmede estetik sorumluluk bize ait elbette. Fonksiyon geometrileri listede verilen sırada çizmektedir. Aşağıdaki gibi parametreyi değiştirerek denerseniz çizilen geometrilerin sırası değiştiği için boxplot dotplot’un üzerini kapatır ve istenmeyen bir görsel sonuç ortaya çıkar:

quickplot(x=Fertility, data=swiss, 
          geom=c("dotplot","boxplot"),
          main="Kötü sırada çizilmiş geometriler")

İki boyutlu veri ile görselleştirmeler

ggplot2de bulunan geometri seçenekleri verinin nasıl ifade edileceğine dair zengin bir menü sunar. Bunlara kitaplığın referans dökümanlarından ulaşılabilir https://ggplot2.tidyverse.org/reference/index.html. Bu bölümde iki boyutlu verilerle örnekler yapacağız. Bu örneklerde boyutlardan her ikisi sayısal veya biri sayısal diğeri kategorik (R terminolojisinde “faktör”) olabilir.

İlk örneğimiz ggplot2 kitaplığı içerisinde gelen ve binek araçların özelliklerine ilişkin mpg veriseti ile olacak. Araçların şehir içi ve şehirler arası yakıt tüketimini quickplot() ile basitçe çizebiliriz. Bu örneğimizde iki değişken de sayısaldır:

require(ggplot2)
quickplot(x=cty, y=hwy, data=mpg)

R’daki temel plot fonksiyonunda olduğu gibi grafiğin başlığını ve eksenlerin etiketlerini, çizimin yükseklik/genişlik oranını (aspect oranı), vb. değiştirebilirsiniz:

require(ggplot2)
quickplot(x=cty, y=hwy, data=mpg,
          main="Litre başına gidilen mesafe",
          xlab="Şehir içi",
          ylab="Şehir dışı",
          asp=0.4)

Geometri seçenekleri

Bir önceki örnekte sistem iki sayısal vektörle yapılan bir grafik söz konusu olduğu için otomatik olarak nokta geometrisi kullandı. Hatırlarsanız geometri parametresi ile bunu değiştirebilir hatta birden fazla geometriyi üstüste bindirebiliriz.

Geometri seçeneklerini keşfetmek açısından farklı bir geometri örneği daha görelim. Elimizdeki veriyi yakından incelerseniz şehiriçi litre başına kilometre verisinin yuvarlanmış değerleri olduğunu, yani değerlerin çok tekrar ettiğini farkedersiniz (çıktı gösterilmemiştir):

stem(mpg$cty)
## 
##   The decimal point is at the |
## 
##    8 | 00000
##   10 | 00000000000000000000
##   12 | 00000000000000000000000000000
##   14 | 0000000000000000000000000000000000000000000
##   16 | 00000000000000000000000000000000000
##   18 | 0000000000000000000000000000000000000000000000
##   20 | 0000000000000000000000000000000000
##   22 | 0000000
##   24 | 0000000
##   26 | 000
##   28 | 000
##   30 | 
##   32 | 0
##   34 | 0
stem(mpg$hwy)
## 
##   The decimal point is at the |
## 
##   12 | 00000
##   14 | 000000000000
##   16 | 00000000000000000000000000000000000000
##   18 | 00000000000000000000000
##   20 | 0000000000000
##   22 | 00000000000000
##   24 | 0000000000000000000000000000
##   26 | 0000000000000000000000000000000000000000000000
##   28 | 00000000000000000000000000000
##   30 | 00000000000
##   32 | 000000
##   34 | 000
##   36 | 000
##   38 | 
##   40 | 0
##   42 | 
##   44 | 00

Dolayısıyla grafikte noktalar üstüste binmektedir. Bunları ayrıştırmak için ufak rasgele değerler eklemeye dayalı jitter tekniğini kullanan geometriyi geom parametresi ile kullanalım. Bunlarda üstüste binen veri noktalarının neden olduğu algı yanılması uygulanan görselleştirme jitter geometrisi ile aşılmaktadır.

quickplot(x=cty, y=hwy, data=mpg, 
          geom="jitter",
          main="Jitter geometrisi")

Aşağıdaki örnekte de geom parametresine bir liste halinde geometri isimleri verilerek birden fazla geometri kullanılmıştır. hem iki boyutta veri noktaları jitter geometrisi ile ayrıştırılarak çizilmiş hem de üstüne dağılımın birinci, ikinci, ve üçüncü çeyreklerini gösteren çizgiler quantile geometrisi ile eklenmiştir.

require(ggplot2)
quickplot(x=cty, y=hwy, data=mpg,
          main="Litre başına gidilen mesafe",
          xlab="Şehir içi",
          ylab="Şehir dışı",
          geom=c("jitter","quantile"))

Yine farklı bir geometri örneği de özellikle gözlem sayısının çok fazla olduğu veri setlerine uygundur. Aşağıda nokta yoğunluk haritası geometrisi örneği verilmiştir:

quickplot(x=cty, y=hwy, data=mpg, 
          geom="density2d",
          main="Yoğunluk grafiği")

Bu geometriyle iyi kombine olabilecek bir geometri de rug adı verilen, veri yoğunluğunu eksenler üzerinde gösteren bir geometridir. İkisini birlikte kullanırsak:

quickplot(x=cty, y=hwy, data=mpg, 
          geom=c("rug","density2d"),
          main="Yoğunluk grafiği",
          show.legend=TRUE)

Regresyon geometrileri

İki sayısal veri vektörünün grafik çizimlerine sıklıkla aradaki nedensellik ilişkisini görünür kılmak hedeflenir. Bu konuda da en yaygın yöntem regresyon yöntemidir. Bu yüzden ggplot2 kıtaplığı da regresyon yoluyla nedensellik ilişkisini görselleştirmek amacıyla bazı geometriler sunmaktadır.

Buradaki örneğimizde tek değişkenli (bir girdi ve bir çıktı) doğrussal olmayan, polinom regresyon sonucunda bulunan regresyon çizgisini gösteren bir geometri kullanacağız. Bu geometrinin adı `smooth’. Önce veri noktalarını çizdirip sonra regresyon geometrisini üzerine ekleyeceğiz:

quickplot(x=cty, y=hwy, data=mpg, 
          geom=c("point","smooth"))

Bu örnekte gördüğünüz gibi verinin yoğun bulunduğu yerlerde daha isabetli ve dar marjlar içerisinde regresyon yapılabiliyor. Seyrek yerlerde tahmin marjları açılıyor.

Regresyon geometrilerinin pek çok farklı seçeneği bulunuyor ancak quickplot()un basit ama sınırlı söz dizimi ile yapabileceklerimiz sınırlı. Gelecek bölümde ggplot2‘nin tam notasyonu kullandığımızda bu konuya geri döneceğiz.

Kategorik değişkenlerin görselleştirilmesi

Yukarıda kullandığımız veri setindeki değişkenlerden bazıları sayısal değil kategorik, yani faktör değişkenlerdir. Ancak veri tiplerinin R tarafında doğru olup olmadığı konusunda her zaman kontrol ederek ilerlenmelidir:

summary.default(mpg)
##              Length Class  Mode     
## manufacturer 234    -none- character
## model        234    -none- character
## displ        234    -none- numeric  
## year         234    -none- numeric  
## cyl          234    -none- numeric  
## trans        234    -none- character
## drv          234    -none- character
## cty          234    -none- numeric  
## hwy          234    -none- numeric  
## fl           234    -none- character
## class        234    -none- character

Aşağıdaki örneğimizde sürüş tipi ve şehir içi litre başı gidilen yol grafiğini çizeceğiz:

quickplot(x=drv, y=cty, data=mpg)

Burada sürüş tipi “f” front yani önden çekişli, “r” rear yani arkadan itişli, ve “4” yani dört çeker olarak üç tipte bir kategorik değişken. Sistem otomatik olarak nokta geometrisi çizdi. Ancak örneğin whisker çizimi burada daha aydınlatıcı olabilir. Bunu öntanımlı geometri parametresini değiştirerek yapabiliriz. Aşağıdaki örnek ancak boyutlardan birinin sürekli sayısal değer olmadığı ve kategorik olduğu dolayısıyla her bir dğeri için whisker/boxplot çizilebilecek miktarda örneğin bulunduğu durumlarda kullanılabilir:

quickplot(x=drv, y=cty, data=mpg,
          geom="boxplot")

Bu geometriyi iki boyutun da sayısal ve sürekli değişken olduğu bir durumda kullanırsanız pek anlamlı olmayan bir grafiğin yanısıra uyarı mesajı alırsınız:

quickplot(x=cty, y=hwy, data=mpg,
          geom="boxplot")
## Warning: Continuous x aesthetic -- did you forget aes(group=...)?

Grafiklerin dosyaya aktarılması

ggplot2 grafik görsellerin dosyaya kaydedilmesi için ggsave() isimli bir fonksiyon kullanmaktadır. Çizimi yaptırdıktan sonra bu fonksiyona vereceğiniz dosya ismine göre sistem otomatik olarak dosya uzantısından görüntü formatını seçerek kaydedecektir:

quickplot(x=drv, y=cty, data=mpg,
          geom="boxplot",
          main="şehir içi ve şehirlerarası yakıt verimliliği")
ggsave("çizim.jpg")

Üç değişkenli görselleştirme

Kategorik değişkenler sürekli bir eksen üzerinde görselleştirmeye pek yatkın değildir. Onun yerine renk veya sembol kodlamasına yansıtılmaları daha anlamlı sonuçlar verir. quickplot() fonksiyonu veri noktalarının renk, şekil, veya boyunu üçüncü bir değişkene bağlamamıza imkan verir. Bunu örneklemek için araçların şehir içi ve şehir dışı yakıt verimliliği ile beraber üçüncü değişken olarak sürüş tipi değişkenini renk olarak kullanalım. Noktaları daha ayrışmış görebilmek için bunu “jitter” geometrisi ile birleştirebiliriz. örneğimizde color parametresine renk olarak kullanmak istediğimiz kategorik değişkenin adını vermemiz yeterlidir:

quickplot(x=cty, y=hwy, data=mpg,
          color=drv,
          geom="jitter")

Burada kategorik değişkenin üç farklı değerine karşılık gelen renklerin neler olacağına fonksiyon kendisi karar verdi. Bu da bir öneceki bölümde R’ın klasik plot() fonksiyonu ile karşılaştırıldığında hem kullanımı basit hem de görsel kalitesi yüksek bir sonuç vermiş oldu.

Dört veya daha fazla değişken ile infografik görseller

Aynı verisetinden toplam dört değişken kullanan bir örnek aşağıda verilmiştir. Örneğimizde veri noktalarının rengi araç türünü, noktaların büyüklüğü ise silindir hacmini göstermektedir:

quickplot(x=cty, y=hwy, data=mpg,
      color=class, 
      size=displ, 
      main="Dört değişken kullanımı")

Son bir örnek olarak beşinci bir değişkeni ekleyelim. Bu değişkenimiz nominal, yani metin bir dğişken: araç markası. Bu değişkeni “label” yani etiket olarak grafiğe ekleyeceğiz. Ancak bunu yapmak için nokta geometrisi yerine “label” yani etiket geometrisi kullanmak gerekiyor:

quickplot(x=cty, y=hwy, data=mpg,
      color=class, 
      size=displ, 
      label=manufacturer,
      main="Dört değişken kullanımı",
      geom="label")

Bu noktada artık hızlı grafik fonksiyonu quickplot() ile yapabileceklerimizin sınırına gelmiş olduk diyebiliriz. Bir sonraki bölümde ggplot2 nin tam sözdizimi ile beraber daha karmaşık ama istediğimiz şekilde yönlendirebileceğimiz grafikler yapacağız.