{count, plural, one {Kursus} other {Kursus}}
Pendahuluan
Dengan faceting, Anda dapat membuat plot multi-panel dan mengontrol bagaimana skala pada satu panel berkaitan dengan skala pada panel lainnya.
Penggunaan Facet Sederhana
Jika Anda familier dengan ggplot2, Anda akan mengenal struktur dasar pemanggilan fungsi ggplot(). Untuk pengantar ggplot2, Anda dapat melihat kursus ggplot2 kami. Saat memanggil ggplot, Anda memberikan sumber data, biasanya sebuah data frame, lalu meminta ggplot memetakan berbagai variabel dalam sumber data ke berbagai estetika, seperti posisi sumbu x atau y, atau warna titik atau batang. Dengan facet, Anda mendapatkan cara tambahan untuk memetakan variabel. Untuk mendemonstrasikan ini, Anda akan menggunakan dataset berikut, yang mencakup sejumlah indikator ekonomi untuk beberapa negara. Sebagian besar merupakan variasi dari PDB (GDP), yaitu Produk Domestik Bruto tiap negara.
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
Variabel-variabel berikut tersedia:
Country: Sudah jelas!
GDP_nom: Produk Domestik Bruto sebagai nilai nominal dalam USD
GDP_PPP: Produk Domestik Bruto yang disesuaikan dengan daya beli (purchasing power)
GDP_nom_per_capita: Produk Domestik Bruto sebagai nilai nominal dalam USD per kapita
GDP_PPP_per_capita: Produk Domestik Bruto yang disesuaikan dengan daya beli per kapita
GNI_per_capita: Pendapatan Nasional Bruto tiap negara per kapita.
Region: wilayah dunia tempat negara tersebut berada.
Untuk mulai, mari buat barplot sederhana dari PDB nominal tiap negara.
ggplot(econdata, aes(x=Country, y=GDP_nom))+
geom_bar(stat='identity', fill="forest green")+
ylab("GDP (nominal)")

Anda juga dapat memplot variabel lain, yaitu GDP yang disesuaikan PPP.
ggplot(econdata, aes(x=Country, y=GDP_PPP))+
geom_bar(stat='identity', fill="forest green")+
ylab("GDP (PPP)")

Ini memberi Anda grafik kedua yang terpisah, mirip dengan yang sebelumnya tetapi menggunakan variabel berbeda. Misalkan Anda ingin memplot GDP (nominal) dan GDP (PPP) bersama. Anda akan menggunakan faceting untuk melakukannya. Pertama, Anda perlu memformat ulang data, mengubahnya dari format "lebar" dengan tiap variabel di kolom tersendiri menjadi format "panjang", di mana Anda menggunakan satu kolom untuk nilai ukur dan kolom lain sebagai kunci yang memberi tahu ukuran mana yang digunakan di tiap baris.
econdatalong <- gather(econdata, key="measure", value="value", c("GDP_nom", "GDP_PPP"))
Setelah data dalam format tersebut, Anda dapat menggunakan variabel kunci untuk memplot dengan facet. Mari bangun plot sederhana, menampilkan GDP nominal (dari plot pertama) dan GDP (PPP) (dari plot kedua). Untuk melakukannya, Anda cukup memodifikasi kode dengan menambahkan +facet_wrap() dan menentukan bahwa ~measure, variabel kunci kita, digunakan untuk faceting.
ggplot(econdatalong, aes(x=Country, y=value))+
geom_bar(stat='identity', fill="forest green")+
facet_wrap(~measure)

Ini berfungsi, tetapi Anda akan melihat nama negara menjadi rapat. Mari atur ulang panelnya.
Menyesuaikan Tata Letak dan Mengurutkan Ulang
Perintah facet_wrap() akan otomatis memilih berapa banyak kolom yang digunakan. Anda dapat menentukannya langsung menggunakan ncol=, seperti berikut:
ggplot(econdatalong, aes(x=Country, y=value))+
geom_bar(stat='identity', fill="forest green")+
facet_wrap(~measure, ncol=1)

Anda mungkin memperhatikan bahwa negara-negara pada sumbu x di atas diurutkan secara alfabet. Jika ingin mengubahnya, cara termudah adalah mengatur level dari faktor Country. Mari lakukan pengurutan ulang, menata negara sesuai urutan total GDP nominal.
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)

Anda juga dapat melakukan kustomisasi tambahan, seperti memindahkan label facet ke sisi kiri dengan argumen strip.position.
ggplot(econdatalong, aes(x=Country, y=value))+
geom_bar(stat='identity', fill="forest green")+
facet_wrap(~measure, ncol=1, strip.position = "left")

Melabeli Facet
Anda mungkin memperhatikan bahwa facet memiliki judul pendek sederhana, diambil dari level faktor measure. Mari rapikan dan beri label yang lebih baik. Untuk ini, Anda akan membuat fungsi labeller sederhana, variable_labeller, yang akan mengembalikan nama yang sesuai saat diminta salah satu nilai dari variable_names. Lalu, oper fungsi ini ke argumen labeller di facet_wrap.
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)

Bermain dengan Skala dan Ruang
Mari buat plot ber-facet yang lebih besar, menggunakan setiap ukuran ekonomi.
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))

Itu tidak bagus sama sekali! Anda tidak dapat melihat nilai untuk tiga panel. Mengapa demikian? Mari lihat data utama untuk mengetahuinya.
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
##
Jika Anda melihat tiap kolom, Anda akan melihat nilainya menjangkau beberapa orde magnitudo. Secara bawaan, faceting akan menggunakan batas dan rentang yang sama untuk sumbu X dan Y. Untuk mengubahnya, Anda dapat menambahkan potongan kode ini ke faceting: scales="free_y" sehingga tiap facet menggunakan skala y yang independen.
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)

Ini jauh lebih baik. Tiap facet kini memiliki sumbu y yang independen.
Menggunakan Facet untuk Membuat Subdivisi
Anda mungkin memperhatikan bahwa dataset kita juga menyertakan variabel Region, yang menunjukkan wilayah tempat negara tersebut berada. Anda dapat menggunakan variabel ini untuk mewarnai batang menurut wilayah, seperti berikut:
ggplot(econdatalong, aes(x=Country, y=value, fill=Region))+
geom_bar(stat='identity')+
facet_wrap(~measure, scales="free_y", ncol=1, labeller= variable_labeller)

Namun, ini agak berantakan; bukankah lebih baik jika Anda dapat menempatkan tiap wilayah dalam sub-panelnya sendiri? Dengan faceting, Anda bisa! Di sini Anda akan menggunakan facet_grid alih-alih facet_wrap, karena itu memudahkan memetakan facet ke dua variabel, Region dan measure, di mana keduanya tersebar di baris dan kolom dari kisi plot. Perhatikan bahwa Anda juga mengatur scales="free" dan space="free", sehingga panel yang berbeda dapat mengambil ruang yang berbeda. Anda juga perlu membuat fungsi labeller baru, yang akan menghasilkan nama untuk baris dan label.
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)

Sekarang jauh lebih jelas! Tiap wilayah memiliki kolom panelnya sendiri, dan tiap metrik memiliki baris batangnya sendiri.
Sekian untuk tutorial ini. Semoga Anda menikmati mempelajari facet.
Jika Anda ingin mempelajari lebih lanjut tentang facet, ikuti kursus Visualizing Big Data with Trelliscope dari DataCamp.
Lihat juga Panduan Memulai Tidyverse: Tutorial kami.
