Kurs
Giriş
Facetleme ile çok panelli grafikler oluşturabilir ve bir panelin ölçeklerinin diğerininkiyle nasıl ilişkili olduğunu kontrol edebilirsiniz.
Basit Facet Kullanımı
ggplot2'ye biraz aşinaysanız, ggplot() işlevine yapılan çağrının temel yapısını bilirsiniz. ggplot2'ye giriş için ggplot2 kursumuza göz atabilirsiniz. ggplot çağırdığınızda, bir veri kaynağı, genellikle bir veri çerçevesi sağlarsınız, ardından ggplot'tan veri kaynağımızdaki farklı değişkenleri x veya y eksenlerinin konumu ya da noktalarımızın veya çubuklarımızın rengi gibi farklı estetiklere eşlemesini istersiniz. Facet'lerle değişkenleri eşlemek için ek bir yol kazanırsınız. Bunu göstermek için, çeşitli ülkeler için bir dizi ekonomik gösterge içeren aşağıdaki veri setinden yararlanacağız. Bunların çoğu, her ülkenin Gayri Safi Yurtiçi Hasılası (GSYH) olan GDP'nin varyantlarıdır.
print(econdata)
## Country GDP_nom GDP_PPP GDP_nom_per_capita GDP_PPP_per_capita
## 1 USA 19390600 19390600 59501 59495
## 2 Canada 1652412 1769270 45077 48141
## 3 China 12014610 23159107 8643 16807
## 4 Japan 4872135 5428813 38440 42659
## 5 France 2583560 2835746 39869 43550
## 6 Germany 3684816 4170790 44550 50206
## 7 Sweden 3684816 520937 53218 51264
## 8 Ireland 333994 343682 70638 72632
## GNI_per_capita Region
## 1 58270 North America
## 2 42870 North America
## 3 8690 Asia
## 4 38550 Asia
## 5 37970 Europe
## 6 43490 Europe
## 7 52590 Europe
## 8 55290 Europe
Aşağıdaki değişkenler bulunmaktadır:
Country: Açıklamaya gerek yok!
GDP_nom: ABD doları cinsinden cari fiyatlarla GSYH
GDP_PPP: Farklı satın alma güçleri için düzeltilmiş GSYH
GDP_nom_per_capita: Kişi başına ABD doları cinsinden cari fiyatlarla GSYH
GDP_PPP_per_capita: Kişi başına satın alma gücü paritesine göre düzeltilmiş GSYH
GNI_per_capita: Her ülke için kişi başına düşen Gayri Safi Milli Gelir.
Region: Ülkenin bulunduğu dünya bölgesi.
Öncelikle, her ülkenin cari fiyatlarla GSYH'sinin basit bir çubuk grafiğini oluşturalım.
ggplot(econdata, aes(x=Country, y=GDP_nom))+
geom_bar(stat='identity', fill="forest green")+
ylab("GDP (nominal)")

Ayrıca başka bir değişkeni, PPP'ye göre düzeltilmiş GSYH'yi de çizebilirsiniz.
ggplot(econdata, aes(x=Country, y=GDP_PPP))+
geom_bar(stat='identity', fill="forest green")+
ylab("GDP (PPP)")

Bu, sonuncusuna benzer ikinci ayrı bir grafik verir, ancak farklı bir değişkenden yararlanır. Diyelim ki hem GSYH (cari) hem de GSYH (PPP)'yi birlikte çizmek istiyorsunuz. Bunu yapmak için facetleme kullanacaksınız. Öncelikle verilerinizi yeniden biçimlendirmeniz gerekecek; her değişkenin kendi sütununda olduğu "geniş" formattan, ölçümlerinizi tek bir sütunda, her satırda hangi ölçümü kullandığımızı belirten bir anahtar değişkeni ise başka bir sütunda tuttuğunuz "uzun" formata dönüştüreceksiniz.
econdatalong <- gather(econdata, key="measure", value="value", c("GDP_nom", "GDP_PPP"))
Veriler bu formata geldikten sonra, facet'lerle çizim yapmak için anahtar değişkenimizi kullanabilirsiniz. İlk grafiğimizden cari GSYH'yi ve ikinci grafikten GSYH (PPP)'yi birlikte gösteren basit bir grafik oluşturalım. Bunu yapmak için, kodunuzu +facet_wrap() ekleyecek ve facetleme için anahtar değişkenimiz ~measure'ın kullanılacağını belirtecek şekilde basitçe değiştirirsiniz.
ggplot(econdatalong, aes(x=Country, y=value))+
geom_bar(stat='identity', fill="forest green")+
facet_wrap(~measure)

Bu işe yarıyor, ancak ülke adlarının ne kadar sıkıştığına dikkat edeceksiniz. Panellerimizi yeniden düzenleyelim.
Yerleşimi Özelleştirme ve Yeniden Sıralama
facet_wrap() komutu, kaç sütun kullanılacağını otomatik olarak seçer. Bunu doğrudan ncol= ile şu şekilde belirtebilirsiniz:
ggplot(econdatalong, aes(x=Country, y=value))+
geom_bar(stat='identity', fill="forest green")+
facet_wrap(~measure, ncol=1)

Yukarıdaki x ekseninde ülkelerin alfabetik sırayla dizildiğini muhtemelen fark etmişsinizdir. Bunu değiştirmek isterseniz, bunu yapmanın en kolay yolu Country faktörünün seviyelerini ayarlamaktır. Bu yeniden sıralamayı yapalım ve ülkeleri toplam cari GSYH'ye göre düzenleyelim.
econdata$Country <- factor(econdata$Country, levels= econdata$Country[order(econdata$GDP_nom)])
econdatalong <- gather(econdata, key="measure", value="value", c("GDP_nom", "GDP_PPP"))
ggplot(econdatalong, aes(x=Country, y=value))+
geom_bar(stat='identity', fill="forest green")+
facet_wrap(~measure, ncol=1)

strip.position argümanı ile facet etiketlerini sol tarafa taşımak gibi ek özelleştirmeler de yapabilirsiniz.
ggplot(econdatalong, aes(x=Country, y=value))+
geom_bar(stat='identity', fill="forest green")+
facet_wrap(~measure, ncol=1, strip.position = "left")

Facet'leri Etiketleme
Facet'lerin, measure faktörünün seviyelerinden alınan kısa basit başlıklara sahip olduğunu fark etmiş olabilirsiniz. Bunu toparlayalım ve facet'lerimize daha güzel etiketler verelim. Bunu yapmak için, variable_names değerlerinden biri istendiğinde uygun adı döndürecek basit bir etiketleyici işlevi variable_labeller oluşturacaksınız. Ardından bu işlevi facet_wrap'ın labeller argümanına geçirirsiniz.
variable_names <- list(
"GDP_nom" = "GDP (nominal)" ,
"GDP_PPP" = "GDP (purchasing power parity)"
)
variable_labeller <- function(variable,value){
return(variable_names[value])
}
ggplot(econdatalong, aes(x=Country, y=value))+
geom_bar(stat='identity', fill="forest green")+
facet_wrap(~measure, ncol=1, labeller=variable_labeller)

Ölçekler ve Alanla Oynamak
Her bir ekonomik ölçümü kullanarak daha büyük bir facet'li grafik oluşturalım.
econdatalong <- gather(econdata, key="measure", value="value", c( "GDP_nom" , "GDP_PPP" ,"GDP_nom_per_capita", "GDP_PPP_per_capita" ,"GNI_per_capita"))
variable_names <- list(
"GDP_nom" = "GDP (nominal)" ,
"GDP_PPP" = "GDP (purchasing power parity)",
"GDP_nom_per_capita" = "GDP (nominal) per capita",
"GDP_PPP_per_capita" = "GDP (purchasing power parity) per capita",
"GNI_per_capita" = "GNI per capita"
)
variable_labeller <- function(variable,value){
return(variable_names[value])
}
ggplot(econdatalong, aes(x=Country, y=value))+
geom_bar(stat='identity', fill="forest green")+
facet_wrap(~measure, ncol=1, labeller= variable_labeller)+
scale_y_continuous(breaks = pretty(econdatalong$value, n = 10))

Bu hiç iyi değil! Panellerin üçü için değerleri göremiyorsunuz. Neden? Bunun nedenini görmek için birincil verilere bakalım.
summary(econdata)
## Country GDP_nom GDP_PPP GDP_nom_per_capita
## Ireland:1 Min. : 333994 Min. : 343682 Min. : 8643
## Canada :1 1st Qu.: 2350773 1st Qu.: 1457187 1st Qu.:39512
## France :1 Median : 3684816 Median : 3503268 Median :44814
## Germany:1 Mean : 6027118 Mean : 7202368 Mean :44992
## Sweden :1 3rd Qu.: 6657754 3rd Qu.: 8919260 3rd Qu.:54789
## Japan :1 Max. :19390600 Max. :23159107 Max. :70638
## (Other):2
## GDP_PPP_per_capita GNI_per_capita Region
## Min. :16807 Min. : 8690 Asia :2
## 1st Qu.:43327 1st Qu.:38405 Europe :4
## Median :49174 Median :43180 North America:2
## Mean :48094 Mean :42215
## 3rd Qu.:53322 3rd Qu.:53265
## Max. :72632 Max. :58270
##
Her sütuna baktığınızda, her sütundaki değerlerin birkaç mertebeye yayıldığını görürsünüz. Varsayılan olarak facetleme, hem X hem de Y eksenleri için aynı sınır ve aralıkları kullanır. Bunu değiştirmek için, facetleme kodunuza scales="free_y" ekleyerek her facet'in kendi bağımsız ölçeğini kullanmasını sağlayabilirsiniz.
ggplot(econdatalong, aes(x=Country, y=value))+
geom_bar(stat='identity', fill="forest green")+
facet_wrap(~measure, scales="free_y", ncol=1, labeller= variable_labeller)

Bu çok daha iyi. Artık her facet'in kendi bağımsız y ekseni var.
Alt Bölümler Oluşturmak için Facet Kullanımı
Veri setimizde, ilgili ülkenin bulunduğu bölgeyi belirten Region değişkeninin de bulunduğunu fark etmiş olabilirsiniz. Bu değişkeni, çubuklarımızı bölgeye göre renklendirmek için aşağıdaki gibi kullanabilirsiniz:
ggplot(econdatalong, aes(x=Country, y=value, fill=Region))+
geom_bar(stat='identity')+
facet_wrap(~measure, scales="free_y", ncol=1, labeller= variable_labeller)

Ancak bu biraz karmaşık; keşke farklı bölgelerin her birini kendi alt paneline koyabilseydiniz. Facetleme ile bunu yapabilirsiniz! Burada, facet'leri iki değişkene, Region ve measure'a eşlemek için facet_wrap yerine facet_grid kullanacaksınız; böylece bu iki değişken, grafiklerden oluşan bir ızgaranın satır ve sütunlarına yayılacak. Ayrıca, farklı panellerimizin farklı miktarda alan kaplamasına izin vermek için scales="free" ve space="free" ayarlarını yaptığınızı unutmayın. Hem satırlar hem de etiketler için adlar üretecek yeni bir etiketleyici işlevi de oluşturmanız gerekecek.
variable_names <- list(
"GDP_nom" = "GDP \n(nominal)" ,
"GDP_PPP" = "GDP \n(PPP)",
"GDP_nom_per_capita" = "GDP (nominal)\n per capita",
"GDP_PPP_per_capita" = "GDP (PPP)\n per capita",
"GNI_per_capita" = "GNI \nper capita"
)
region_names <- levels(econdata$Region)
variable_labeller2 <- function(variable,value){
if (variable=='measure') {
return(variable_names[value])
} else {
return(region_names)
}
}
ggplot(econdatalong, aes(x=Country, y=value, fill=Region))+
geom_bar(stat='identity')+
facet_grid(measure~Region, scales="free", space="free_x", labeller= variable_labeller2)

Şimdi çok daha net! Her bölgenin kendi panel sütunu, her ölçütün ise kendi çubuk satırı var.
Bu eğitim burada sona eriyor. Facet'ler hakkında bilgi edinmekten keyif aldığınızı umuyorum.
Daha fazla bilgi edinmek isterseniz, DataCamp'in Trelliscope ile Büyük Verileri Görselleştirme kursunu alın.
Tidyverse'e Başlarken: Eğitim yazımıza göz atın.
