9 Katmanlar
9.1 Giriş
Bölüm 1 bölümünde, yalnızca saçılım grafikleri, çubuk grafikler ve kutu grafikleri yapmaktan çok daha fazlasını öğrendiniz. ggplot2 ile herhangi bir grafik türü yapmak için kullanabileceğiniz bir temel öğrendiniz.
Bu bölümde katmanlı grafik gramerini öğrenerek bu temeli genişleteceksiniz. Estetik eşlemeleri, geometrik nesneleri ve panelleri daha ayrıntılı inceleyerek başlayacağız. Ardından ggplot2’nin grafik oluştururken arka planda gerçekleştirdiği istatistiksel dönüşümleri öğreneceksiniz. Bu dönüşümler, bir çubuk grafikteki çubukların yükseklikleri veya bir kutu grafikteki medyanlar gibi, çizilecek yeni değerleri hesaplamak için kullanılır. Ayrıca, geom’ların grafiklerinizde nasıl gösterildiğini değiştiren konum ayarlamaları hakkında da bilgi edineceksiniz. Son olarak, koordinat sistemlerini kısaca tanıtacağız.
Her katmana ilişkin bütün fonksiyonları ve seçenekleri ele almayacağız. Bunun yerine ggplot2’nin en önemli ve yaygın özelliklerini adım adım gösterecek, ayrıca ggplot2’yi genişleten paketleri tanıtacağız.
9.1.1 Ön koşullar
Bu bölüm ggplot2’ye odaklanır. Bu bölümde kullanılan veri kümelerine, yardım sayfalarına ve fonksiyonlara erişmek için, şu kodu çalıştırarak tidyverse’i yükleyin:
9.2 Estetik eşlemeler
“Bir resmin en büyük değeri, bizi asla beklemediğimiz bir şeyi fark etmeye zorladığı andır.” — John Tukey
ggplot2 paketiyle birlikte gelen mpg veri çerçevesinin, 38 araç modeline ait 234 gözlem içerdiğini hatırlayın.
mpg
#> # A tibble: 234 × 11
#> manufacturer model displ year cyl trans drv cty hwy fl
#> <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr>
#> 1 audi a4 1.8 1999 4 auto(l5) f 18 29 p
#> 2 audi a4 1.8 1999 4 manual(m5) f 21 29 p
#> 3 audi a4 2 2008 4 manual(m6) f 20 31 p
#> 4 audi a4 2 2008 4 auto(av) f 21 30 p
#> 5 audi a4 2.8 1999 6 auto(l5) f 16 26 p
#> 6 audi a4 2.8 1999 6 manual(m5) f 18 26 p
#> # ℹ 228 more rows
#> # ℹ 1 more variable: class <chr>mpg’deki değişkenlerden bazıları şunlardır:
displ: Aracın motor hacmi, litre cinsinden. Sayısal bir değişken.hwy: Aracın otoyoldaki yakıt verimliliği, galon başına mil (mpg) cinsinden. Aynı mesafeyi kat ederken, düşük yakıt verimliliğine sahip bir araç, yüksek yakıt verimliliğine sahip bir araçtan daha fazla yakıt tüketir. Sayısal bir değişken.class: Araç türü. Kategorik bir değişken.
Çeşitli araç class’ları için displ ile hwy arasındaki ilişkiyi görselleştirerek başlayalım. Bunu, sayısal değişkenleri x ve y estetiklerine; kategorik değişkeni ise color veya shape gibi bir estetiğe eşleyen saçılım grafiğiyle yapabiliriz.
# Sol
ggplot(mpg, aes(x = displ, y = hwy, color = class)) +
geom_point()
# Sağ
ggplot(mpg, aes(x = displ, y = hwy, shape = class)) +
geom_point()
#> Warning: The shape palette can deal with a maximum of 6 discrete values because more
#> than 6 becomes difficult to discriminate
#> ℹ you have requested 7 values. Consider specifying shapes manually if you
#> need that many of them.
#> Warning: Removed 62 rows containing missing values or values outside the scale range
#> (`geom_point()`).

class, shape’e eşlendiğinde, iki uyarı alırız:
1: The shape palette can deal with a maximum of 6 discrete values because more than 6 becomes difficult to discriminate; you have 7. Consider specifying shapes manually if you must have them.
2: Removed 62 rows containing missing values (
geom_point()).
ggplot2 varsayılan olarak aynı anda yalnızca altı şekil kullanabildiğinden shape estetiğine eşlenen ek gruplar çizilmez. İkinci uyarı bununla ilgilidir – veri kümesinde 62 SUV var ve bunlar çizilmiyor.
Benzer şekilde, class’ı sırasıyla noktaların boyutunu ve saydamlığını kontrol eden size veya alpha estetiklerine de eşleyebiliriz.
# Sol
ggplot(mpg, aes(x = displ, y = hwy, size = class)) +
geom_point()
#> Warning: Using size for a discrete variable is not advised.
# Sağ
ggplot(mpg, aes(x = displ, y = hwy, alpha = class)) +
geom_point()
#> Warning: Using alpha for a discrete variable is not advised.

Bunların ikisi de uyarı üretir:
Using alpha for a discrete variable is not advised.
Sırasız kesikli (kategorik) bir değişkeni (class) sıralı bir estetiğe (size veya alpha) eşlemek genellikle iyi bir fikir değildir; çünkü aslında var olmayan bir sıralamayı ima eder.
Bir estetiği eşledikten sonra gerisini ggplot2 halleder. Estetiğe uygun bir ölçek seçer ve düzeylerle değerler arasındaki eşlemeyi açıklayan bir gösterge oluşturur. ggplot2, x ve y estetikleri için gösterge yerine eksen çizgisi, işaretler ve etiket oluşturur. Eksen, göstergeyle aynı bilgiyi sağlar: Konumlarla değerler arasındaki eşlemeyi açıklar.
Görünümü belirlemek için bir değişken eşlemesine güvenmek yerine, geom’unuzun görsel özelliklerini geom fonksiyonunuzun bir argümanı olarak (aes()’in dışında) elle de ayarlayabilirsiniz. Örneğin, grafiğimizdeki tüm noktaları mavi yapabiliriz:
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point(color = "blue")
Burada renk, bir değişken hakkında bilgi taşımaz, yalnızca grafiğin görünümünü değiştirir. O estetik için mantıklı bir değer seçmeniz gerekir:
- Bir karakter dizisi olarak bir rengin adı, örneğin,
color = "blue" - Milimetre cinsinden bir noktanın boyutu, örneğin,
size = 1 -
Şekil 9.1’te gösterildiği gibi, bir sayı olarak bir noktanın şekli, örneğin,
shape = 1.
color ve fill estetiklerinin etkileşiminden gelir. İçi boş şekillerin (0–14) sınırı color tarafından belirlenir; dolu şekiller (15–20) color ile doldurulur; dolgulu şekillerin (21–25) sınırı colordur ve fill ile doldurulurlar. Şekiller, benzer şekilleri birbirine yakın tutacak şekilde düzenlenmiştir.
Şimdiye kadar, bir nokta geom’u kullanırken bir saçılım grafiğinde eşleyebileceğimiz veya ayarlayabileceğimiz estetikleri tartıştık. Olası estetik eşlemeler hakkında daha fazla bilgiyi estetik özellikler vinyetinde bulabilirsiniz.
Bir grafik için kullanabileceğiniz belirli estetikler, veriyi temsil etmek için kullandığınız geom’a bağlıdır. Sonraki bölümde geom’lara daha derinlemesine dalıyoruz.
9.2.1 Alıştırmalar
Noktaların pembe dolgulu üçgenler olduğu bir
hwy’ye karşıdisplsaçılım grafiği oluşturun.-
Aşağıdaki kod neden mavi noktalı bir grafikle sonuçlanmadı?
ggplot(mpg) + geom_point(aes(x = displ, y = hwy, color = "blue")) strokeestetiği ne işe yarar? Hangi şekillerle çalışır? (İpucu:?geom_point’i kullanın)Bir estetiği,
aes(color = displ < 5)gibi bir değişken adı dışında bir şeye eşlerseniz ne olur? x ve y’yi de belirtmeniz gerekeceğini unutmayın.
9.3 Geometrik nesneler
Bu iki grafik nasıl benzer?


Her iki grafik de aynı x ve y değişkenlerini içerir ve aynı verileri gösterir. Ama grafikler aynı değildir. Her grafik, veriyi temsil etmek için farklı bir geometrik nesne, geom, kullanır. Soldaki grafik nokta geom’unu, sağdaki grafik ise verilere uydurulmuş pürüzsüz bir çizgi olan smooth geom’unu kullanır.
Grafiğinizdeki geom’u değiştirmek için, ggplot()’a eklediğiniz geom fonksiyonunu değiştirin. Örneğin, yukarıdaki grafikleri yapmak için şu kodu kullanabilirsiniz:
# Sol
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point()
# Sağ
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_smooth()
#> `geom_smooth()` using method = 'loess' and formula = 'y ~ x'ggplot2’deki her geom fonksiyonu, geom katmanında yerel olarak veya ggplot() katmanında global olarak tanımlanan bir mapping argümanı alır. Ancak her estetik her geom ile çalışmaz. Bir noktanın şeklini ayarlayabilirsiniz ancak bir çizginin “şeklini” ayarlayamazsınız. Denerseniz, ggplot2 o estetik eşlemesini sessizce yok sayar. Öte yandan bir çizginin linetype estetiğini ayarlayabilirsiniz. geom_smooth(), linetype estetiğine eşlediğiniz değişkenin her benzersiz değeri için farklı çizgi tipinde ayrı bir çizgi çizer.
# Sol
ggplot(mpg, aes(x = displ, y = hwy, shape = drv)) +
geom_smooth()
# Sağ
ggplot(mpg, aes(x = displ, y = hwy, linetype = drv)) +
geom_smooth()

Burada geom_smooth(), araçları, aracın tahrik sistemini tanımlayan drv değerlerine göre üç çizgiye ayırır. Çizgilerden biri 4, biri f, diğeri de r değerine sahip bütün noktaları temsil eder. Burada 4, dört çeker; f, önden çekiş; r ise arkadan itiş anlamına gelir.
Bu garip geliyorsa, çizgileri ham verinin üzerine bindirip ardından her şeyi drv’ye göre renklendirerek bunu daha netleştirebiliriz.
ggplot(mpg, aes(x = displ, y = hwy, color = drv)) +
geom_point() +
geom_smooth(aes(linetype = drv))
Bu grafiğin aynı grafikte iki geom içerdiğine dikkat edin.
geom_smooth() gibi pek çok geom, birden fazla veri satırını göstermek için tek bir geometrik nesne kullanır. Bu geom’lar için, birden fazla nesne çizmek üzere group estetiğini kategorik bir değişkene ayarlayabilirsiniz. ggplot2, gruplama değişkeninin her benzersiz değeri için ayrı bir nesne çizecektir. Uygulamada, bir estetiği kesikli bir değişkene eşlediğinizde (linetype örneğindeki gibi) ggplot2 bu geom’lara ait verileri otomatik olarak gruplandırır. Bu davranış kullanışlıdır; çünkü group estetiği tek başına geom’lara gösterge veya ayırt edici bir görsel özellik eklemez.
# Sol
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_smooth()
# Orta
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_smooth(aes(group = drv))
# Sağ
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_smooth(aes(color = drv), show.legend = FALSE)


Eşlemeleri bir geom fonksiyonuna yerleştirirseniz, ggplot2 bunları o katman için yerel eşlemeler olarak ele alır. Bu eşlemeleri, global eşlemeleri yalnızca o katman için genişletmek veya üzerine yazmak için kullanır. Bu, farklı katmanlarda farklı estetikler göstermeyi mümkün kılar.
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point(aes(color = class)) +
geom_smooth()
Aynı fikri, her katman için farklı data belirtmek üzere kullanabilirsiniz. Burada, iki koltuklu araçları vurgulamak için kırmızı noktaları ve içi boş daireleri kullanıyoruz. geom_point() içindeki yerel data argümanı, yalnızca o katmanda ggplot() içindeki genel data argümanını geçersiz kılar.
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
geom_point(
data = mpg |> filter(class == "2seater"),
color = "red"
) +
geom_point(
data = mpg |> filter(class == "2seater"),
shape = "circle open", size = 3, color = "red"
)
Geom’lar, ggplot2’nin temel yapı taşlarıdır. Geom’unu değiştirerek grafiğinizin görünümünü tamamen dönüştürebilirsiniz ve farklı geom’lar verinizin farklı özelliklerini ortaya çıkarabilir. Örneğin aşağıdaki histogram ve yoğunluk grafiği, otoyol yakıt verimliliği dağılımının iki modlu ve sağa çarpık olduğunu; kutu grafiği ise iki olası aykırı değeri gösterir.
# Sol
ggplot(mpg, aes(x = hwy)) +
geom_histogram(binwidth = 2)
# Orta
ggplot(mpg, aes(x = hwy)) +
geom_density()
# Sağ
ggplot(mpg, aes(x = hwy)) +
geom_boxplot()


ggplot2, 40’tan fazla geom sağlar; ama bunlar yapılabilecek tüm olası grafikleri kapsamaz. Farklı bir geom’a ihtiyacınız varsa, önce başka birinin onu zaten uygulayıp uygulamadığını görmek için uzantı paketlerine bakmanızı öneririz (bir örnekleme için https://exts.ggplot2.tidyverse.org/gallery/ adresine bakın). Örneğin, ggridges paketi (https://wilkelab.org/ggridges), kategorik bir değişkenin farklı düzeyleri için sayısal bir değişkenin yoğunluğunu görselleştirmek için yararlı olabilecek sırt çizgisi (ridgeline) grafikleri yapmak için kullanışlıdır. Aşağıdaki grafikte yalnızca yeni bir geom (geom_density_ridges()) kullanmakla kalmadık, aynı değişkeni de birden fazla estetiğe (drv’yi y, fill ve color’a) eşledik ve yoğunluk eğrilerini saydam yapmak için bir estetiği de (alpha = 0.5) ayarladık.
library(ggridges)
ggplot(mpg, aes(x = hwy, y = drv, fill = drv, color = drv)) +
geom_density_ridges(alpha = 0.5, show.legend = FALSE)
#> Picking joint bandwidth of 1.28
ggplot2’nin sunduğu tüm geom’lara ve paketteki tüm fonksiyonlara dair kapsamlı bir genel bakış elde etmenin en iyi yeri referans sayfasıdır: https://ggplot2.tidyverse.org/reference. Herhangi bir tek geom hakkında daha fazla bilgi edinmek için yardımı kullanın (örneğin, ?geom_smooth).
9.3.1 Alıştırmalar
Bir çizgi grafiği çizmek için hangi geom’u kullanırsınız? Bir kutu grafiği? Bir histogram? Bir alan grafiği?
-
Bu bölümde daha önce
show.legend’ı açıklamadan kullandık:ggplot(mpg, aes(x = displ, y = hwy)) + geom_smooth(aes(color = drv), show.legend = FALSE)Burada
show.legend = FALSEne işe yarar? Onu kaldırırsanız ne olur? Sizce onu neden daha önce kullandık? geom_smooth()’unseargümanı ne işe yarar?-
Aşağıdaki grafikleri oluşturmak için gereken R kodunu yeniden oluşturun. Grafikte kategorik bir değişken kullanıldığı her yerde bunun
drvolduğunu unutmayın.





9.4 Paneller
Bölüm 1 bölümünde facet_wrap() ile panellere ayırmayı öğrendiniz. Bu fonksiyon, grafiği kategorik değişkenin her düzeyi için verilerin bir alt kümesini gösteren alt grafiklere böler.
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_wrap(~cyl)
Grafiğinizi iki değişkenin birleşimine göre panellere ayırmak için facet_wrap() yerine facet_grid() kullanın. facet_grid()’in ilk argümanı da bir formüldür; ama şimdi çift taraflı bir formüldür: rows ~ cols.
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_grid(drv ~ cyl)
Varsayılan olarak bütün paneller x ve y eksenlerinde aynı ölçeği ve aralığı paylaşır. Bu, verileri paneller arasında karşılaştırırken yararlıdır; ancak her paneldeki ilişkiyi ayrı ayrı görmek istediğinizde kısıtlayıcı olabilir. Panelleme fonksiyonundaki scales argümanını "free_x" olarak ayarlamak sütunlar arasında farklı x ölçeklerine, "free_y" satırlar arasında farklı y ölçeklerine, "free" ise her ikisine izin verir.
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_grid(drv ~ cyl, scales = "free")
9.4.1 Alıştırmalar
Sürekli bir değişkene göre panellere ayırırsanız ne olur?
-
Yukarıdaki grafikte
facet_grid(drv ~ cyl)ile boş hücreler ne anlama gelir? Aşağıdaki kodu çalıştırın. Bunlar ortaya çıkan grafikle nasıl ilişkilidir?ggplot(mpg) + geom_point(aes(x = drv, y = cyl)) -
Aşağıdaki kod hangi grafikleri yapar?
.ne işe yarar?ggplot(mpg) + geom_point(aes(x = displ, y = hwy)) + facet_grid(drv ~ .) ggplot(mpg) + geom_point(aes(x = displ, y = hwy)) + facet_grid(. ~ cyl) -
Bu bölümde panellere ayrılmış ilk grafiği ele alın:
ggplot(mpg) + geom_point(aes(x = displ, y = hwy)) + facet_wrap(~ cyl, nrow = 2)colorestetiği yerine panellere ayırmanın avantajları nelerdir? Dezavantajları nelerdir? Daha büyük bir veri kümeniz olsaydı denge nasıl değişebilirdi? ?facet_wrap’i okuyun.nrowne işe yarar?ncolne işe yarar? Bireysel panellerin düzenini başka hangi seçenekler kontrol eder?facet_grid()nedennrowvencolargümanlarına sahip değildir?-
Aşağıdaki grafiklerden hangisi, farklı tahrik sistemlerine sahip araçların motor hacmini (
displ) karşılaştırmayı kolaylaştırır? Bu sonuç, panelleme değişkenini hangi durumda satırlara veya sütunlara yerleştirmeniz gerektiği hakkında ne söylüyor?ggplot(mpg, aes(x = displ)) + geom_histogram() + facet_grid(drv ~ .) ggplot(mpg, aes(x = displ)) + geom_histogram() + facet_grid(. ~ drv) -
Aşağıdaki grafiği
facet_grid()yerinefacet_wrap()kullanarak yeniden oluşturun. Panel etiketlerinin konumları nasıl değişir?ggplot(mpg) + geom_point(aes(x = displ, y = hwy)) + facet_grid(drv ~ .)
9.5 İstatistiksel dönüşümler
geom_bar() veya geom_col() ile çizilen temel bir çubuk grafiği ele alalım. Aşağıdaki grafik, diamonds veri kümesindeki toplam elmas sayısını cut’a göre gruplandırılmış olarak gösterir. diamonds veri kümesi ggplot2 paketinde bulunur ve her elmasın price, carat, color, clarity ve cut bilgisi dahil olmak üzere ~54.000 elmas hakkında bilgi içerir. Grafik, düşük kaliteli kesimlere göre yüksek kaliteli kesimlere sahip daha fazla elmas bulunduğunu gösterir.
Grafik, x ekseninde diamonds’tan bir değişken olan cut’ı gösterir. Y ekseninde ise count gösterilir; ancak count, diamonds içinde bir değişken değildir! Peki count nereden gelir? Saçılım grafikleri gibi pek çok grafik, veri kümenizin ham değerlerini çizer. Çubuk grafikler gibi diğer grafikler ise çizilecek yeni değerler hesaplar:
Çubuk grafikler, histogramlar ve frekans poligonları verilerinizi aralıklara (bins) ayırır ve ardından her aralığa düşen nokta sayısını çizer.
Pürüzsüzleştiriciler verilere bir model uydurur ve modelin tahminlerini çizer.
Kutu grafikleri, dağılımın beş sayı özetini hesaplar ve ardından bu özeti özel olarak biçimlendirilmiş bir kutu olarak gösterir.
Bir grafik için yeni değerleri hesaplamak üzere kullanılan algoritmaya, istatistiksel dönüşümün kısaltması olan bir stat denir. Şekil 9.2 bu sürecin geom_bar() ile nasıl çalıştığını gösterir.
Bir geom’un hangi stat’ı kullandığını, stat argümanının varsayılan değerini inceleyerek öğrenebilirsiniz. Örneğin, ?geom_bar, stat’ın varsayılan değerinin “count” olduğunu gösterir; bu da geom_bar()’ın stat_count()’u kullandığı anlamına gelir. stat_count(), geom_bar() ile aynı sayfada belgelenmiştir. Aşağı kaydırırsanız, “Computed variables” adlı bölüm, iki yeni değişken hesapladığını açıklar: count ve prop.
Her geom’un varsayılan bir stat’ı, her stat’ın da varsayılan bir geom’u vardır. Bu, genellikle altta yatan istatistiksel dönüşümü dert etmeden geom’ları kullanabileceğiniz anlamına gelir. Ancak, bir stat’ı açıkça kullanmanız gerekebilecek üç neden vardır:
-
Varsayılan stat’ı geçersiz kılmak isteyebilirsiniz. Aşağıdaki kodda,
geom_bar()’ın stat’ını count’tan (varsayılan) identity’ye değiştiriyoruz. Bu, çubukların yüksekliğini bir y değişkeninin ham değerlerine eşlememizi sağlar. -
Dönüştürülmüş değişkenlerden estetiklere olan varsayılan eşlemeyi geçersiz kılmak isteyebilirsiniz. Örneğin, sayımlar yerine oranların bir çubuk grafiğini göstermek isteyebilirsiniz:
ggplot(diamonds, aes(x = cut, y = after_stat(prop), group = 1)) + geom_bar()
Stat tarafından hesaplanabilecek değişkenleri görmek için
geom_bar()yardım sayfasındaki “Computed variables” bölümüne bakın. -
Kodunuzdaki istatistiksel dönüşüme daha fazla dikkat çekmek isteyebilirsiniz. Örneğin, hesapladığınız özete dikkat çekmek için, her benzersiz x değeri için y değerlerini özetleyen
stat_summary()’yi kullanabilirsiniz:ggplot(diamonds) + stat_summary( aes(x = cut, y = depth), fun.min = min, fun.max = max, fun = median )
ggplot2, kullanmanız için 20’den fazla stat sağlar. Her stat bir fonksiyondur, bu yüzden her zamanki gibi yardım alabilirsiniz, örneğin, ?stat_bin.
9.5.1 Alıştırmalar
stat_summary()ile ilişkili varsayılan geom nedir? Önceki grafiği, stat fonksiyonu yerine o geom fonksiyonunu kullanacak şekilde nasıl yeniden yazabilirsiniz?geom_col()ne yapar?geom_bar()’dan nasıl farklıdır?Çoğu geom ve stat, neredeyse her zaman birlikte kullanılan çiftler halinde gelir. Tüm çiftlerin bir listesini yapın. Ortak noktaları nedir? (İpucu: Dokümantasyonu okuyun.)
stat_smooth()hangi değişkenleri hesaplar? Davranışını hangi argümanlar kontrol eder?-
Oran çubuk grafiğimizde,
group = 1ayarlamamız gerekti. Neden? Başka bir deyişle, bu iki grafiğin sorunu nedir?ggplot(diamonds, aes(x = cut, y = after_stat(prop))) + geom_bar() ggplot(diamonds, aes(x = cut, fill = color, y = after_stat(prop))) + geom_bar()
9.6 Konum ayarlamaları
Çubuk grafiklerle ilişkili bir sihir parçası daha var. Bir çubuk grafiği color estetiğini veya, daha kullanışlı olarak, fill estetiğini kullanarak renklendirebilirsiniz:


fill estetiğini class gibi başka bir değişkene eşlediğinizde çubukların otomatik olarak yığıldığına dikkat edin. Her renkli dikdörtgen, drv ve class’ın bir kombinasyonunu temsil eder.
Yığma işlemi, position argümanı tarafından belirtilen konum ayarlaması (position adjustment) kullanılarak otomatik olarak gerçekleştirilir. Yığılmış bir çubuk grafiği istemiyorsanız, diğer üç seçenekten birini kullanabilirsiniz: "identity", "dodge" veya "fill".
-
position = "identity", her nesneyi grafik bağlamında tam olarak düştüğü yere yerleştirir. Bu, çubuklar için pek kullanışlı değildir; çünkü onları üst üste bindirir. Bu üst üste binmeyi görmek için, çubukları yaalpha’yı küçük bir değere ayarlayarak biraz saydam ya dafill = NAayarlayarak tamamen saydam yapmamız gerekir.

Identity konum ayarlaması, varsayılan olarak bu ayarı kullanan noktalar gibi iki boyutlu geom’larda daha yararlıdır.
position = "fill", yığma gibi çalışır; ama her yığılmış çubuk kümesini aynı yükseklikte yapar. Bu, oranları gruplar arasında karşılaştırmayı kolaylaştırır.-
position = "dodge", üst üste binen nesneleri doğrudan birbirinin yanına yerleştirir. Bu, bireysel değerleri karşılaştırmayı kolaylaştırır.

Çubuk grafikler için kullanışlı olmayan, ama saçılım grafikleri için çok kullanışlı olabilecek bir başka ayarlama türü daha var. İlk saçılım grafiğimizi hatırlayın. Veri kümesinde 234 gözlem olmasına rağmen, grafiğin yalnızca 126 nokta gösterdiğini fark ettiniz mi?

hwy ve displ’in temeldeki değerleri yuvarlanmıştır, bu yüzden noktalar bir ızgara üzerinde görünür ve pek çok nokta birbirinin üzerine biner. Bu soruna üst üste çizim (overplotting) denir. Bu düzenleme, verinin dağılımını görmeyi zorlaştırır. Veri noktaları grafiğe eşit şekilde mi yayılmış, yoksa 109 değer içeren, hwy ve displ’in özel bir kombinasyonu mu var?
Konum ayarlamasını "jitter" olarak ayarlayarak bu ızgara görünümünü önleyebilirsiniz. position = "jitter", her noktaya küçük miktarda rastgele gürültü ekler. Bu, noktaları birbirinden ayırır; çünkü iki noktanın aynı miktarda rastgele gürültü alma olasılığı düşüktür.
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point(position = "jitter")
Rastgelelik eklemek grafiği iyileştirmenin tuhaf bir yolu gibi görünebilir; ancak küçük ölçekte doğruluğu biraz azaltırken büyük ölçekte grafiği daha açıklayıcı hâle getirir. Bu çok kullanışlı bir işlem olduğundan, ggplot2, geom_point(position = "jitter") için bir kısayolla birlikte gelir: geom_jitter().
Bir konum ayarlaması hakkında daha fazla bilgi edinmek için, her ayarlamayla ilişkili yardım sayfasına bakın: ?position_dodge, ?position_fill, ?position_identity, ?position_jitter ve ?position_stack.
9.6.1 Alıştırmalar
-
Aşağıdaki grafiğin sorunu nedir? Onu nasıl iyileştirebilirsiniz?
ggplot(mpg, aes(x = cty, y = hwy)) + geom_point() -
İki grafik arasında, varsa, ne fark var? Neden?
ggplot(mpg, aes(x = displ, y = hwy)) + geom_point() ggplot(mpg, aes(x = displ, y = hwy)) + geom_point(position = "identity") geom_jitter()fonksiyonunda jitter miktarını hangi argümanlar denetler?geom_jitter()’ıgeom_count()ile karşılaştırıp karşıtlaştırın.geom_boxplot()’un varsayılan konum ayarlaması nedir? Bunu gösteren birmpgveri kümesi görselleştirmesi oluşturun.
9.7 Koordinat sistemleri
Koordinat sistemleri muhtemelen ggplot2’nin en karmaşık parçasıdır. Varsayılan koordinat sistemi, x ve y konumlarının her noktanın yerini belirlemek için bağımsız olarak hareket ettiği Kartezyen koordinat sistemidir. Zaman zaman yardımcı olan iki koordinat sistemi daha vardır.
-
coord_quickmap(), coğrafi haritalar için en boy oranını doğru şekilde ayarlar. ggplot2 ile mekansal veri çiziyorsanız bu çok önemlidir. Bu kitapta haritaları ele alacak alanımız yok; ancak ggplot2: Elegant graphics for data analysis kitabının Maps bölümünde daha fazla bilgi bulabilirsiniz.nz <- map_data("nz") ggplot(nz, aes(x = long, y = lat, group = group)) + geom_polygon(fill = "white", color = "black") ggplot(nz, aes(x = long, y = lat, group = group)) + geom_polygon(fill = "white", color = "black") + coord_quickmap()

-
coord_polar(), kutupsal koordinatları kullanır. Kutupsal koordinatlar, bir çubuk grafik ile bir Coxcomb grafiği arasındaki ilginç bir bağlantıyı ortaya çıkarır.bar <- ggplot(data = diamonds) + geom_bar( mapping = aes(x = clarity, fill = clarity), show.legend = FALSE, width = 1 ) + theme(aspect.ratio = 1) bar + coord_flip() bar + coord_polar()

9.7.1 Alıştırmalar
coord_polar()kullanarak yığılmış bir çubuk grafiğini bir pasta grafiğine dönüştürün.coord_quickmap()ilecoord_map()arasındaki fark nedir?-
Aşağıdaki grafik, şehir içi ve otoyol mpg’si arasındaki ilişki hakkında size ne anlatıyor?
coord_fixed()neden önemlidir?geom_abline()ne yapar?ggplot(data = mpg, mapping = aes(x = cty, y = hwy)) + geom_point() + geom_abline() + coord_fixed()
9.8 Katmanlı grafik grameri
Bölüm 1.3 içinde öğrendiğiniz grafik şablonunu konum ayarlamaları, istatistikler, koordinat sistemleri ve panelleme ekleyerek genişletebiliriz:
ggplot(data = <VERİ>) +
<GEOM_FONKSİYONU>(
mapping = aes(<EŞLEMELER>),
stat = <STAT>,
position = <KONUM>
) +
<KOORDİNAT_FONKSİYONU> +
<FACET_FONKSİYONU>
Yeni şablonumuz, şablonda açılı parantezler içinde görünen yedi parametre alır. Pratikte, bir grafik oluşturmak için nadiren yedi parametrenin tamamını sağlamanız gerekir; çünkü ggplot2, veri, eşlemeler ve geom fonksiyonu dışındaki her şey için kullanışlı varsayılanlar sağlar.
Şablondaki yedi parametre, grafikler oluşturmak için biçimsel bir sistem olan grafik gramerini oluşturur. Grafik grameri, herhangi bir grafiğin veri kümesi, geom, eşleme kümesi, stat, konum ayarlaması, koordinat sistemi, panelleme şeması ve tema birleşimiyle benzersiz biçimde tanımlanabileceği içgörüsüne dayanır.
Bunun nasıl çalıştığını görmek için temel bir grafiği sıfırdan nasıl oluşturabileceğinizi düşünün. Bir veri kümesiyle başlayıp onu bir stat aracılığıyla göstermek istediğiniz bilgiye dönüştürebilirsiniz. Sonra dönüştürülmüş verilerdeki her gözlemi temsil edecek geometrik nesneyi seçebilirsiniz. Ardından verilerdeki değişkenleri temsil etmek için geom’ların estetik özelliklerini kullanabilirsiniz. Her değişkenin değerlerini bir estetiğin düzeylerine eşlersiniz. Bu adımlar Şekil 9.3 içinde gösterilmiştir. Ardından, x ve y değişkenlerinin değerlerini görüntülemek için nesnelerin konumunu (kendisi de bir estetik özellik olan) kullanarak geom’ları yerleştireceğiniz bir koordinat sistemi seçersiniz.
Bu noktada eksiksiz bir grafiğiniz olur. Yine de geom’ların koordinat sistemi içindeki konumlarını bir konum ayarlamasıyla değiştirebilir veya grafiği panellere bölebilirsiniz. Ayrıca her biri bir veri kümesi, geom, eşleme kümesi, stat ve konum ayarlaması kullanan bir veya daha fazla katman ekleyerek grafiği genişletebilirsiniz.
Hayal ettiğiniz herhangi bir grafiği oluşturmak için bu yöntemi kullanabilirdiniz. Başka bir deyişle, bu bölümde öğrendiğiniz kod şablonunu yüz binlerce benzersiz grafik oluşturmak için kullanabilirsiniz.
ggplot2’nin kuramsal temelleri hakkında daha fazla bilgi edinmek isterseniz kuramı ayrıntılı olarak açıklayan The Layered Grammar of Graphics makalesini okuyabilirsiniz.
9.9 Özet
Bu bölümde katmanlı grafik gramerini öğrendiniz. Basit bir grafik oluşturmak için estetikler ve geometrilerle başladık; grafiği alt kümelere bölmek için panelleri, geom’ların nasıl hesaplandığını anlamak için istatistikleri, üst üste binmeleri denetlemek için konum ayarlamalarını ve x ile y konumlarının anlamını kökten değiştiren koordinat sistemlerini ele aldık. Henüz değinmediğimiz katman temadır; onu Bölüm 11.5 bölümünde tanıtacağız.
ggplot2 işlevlerinin genel görünümü için iki yararlı kaynak vardır: ggplot2 hızlı başvuru sayfası ve ggplot2 paket sitesi.
Bu bölümden çıkarmanız gereken önemli bir ders, ggplot2 tarafından sağlanmayan bir geom’a ihtiyaç duyduğunuzu hissettiğinizde, başkasının o geom’u sunan bir ggplot2 uzantı paketi oluşturarak sorununuzu çoktan çözmüş olup olmadığını araştırmanın her zaman iyi bir fikir olduğudur.


