Lewati ke konten utama

Facet untuk ggplot2 di R

Dalam tutorial ini, Anda akan mempelajari cara memaksimalkan fungsi faceting ggplot.
Diperbarui 28 Sep 2026  · 8 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

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)")
plot

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)")
plot

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)
plot

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)
plot

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)
plot

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")
plot

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)
plot

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))
plot

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)
plot

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)
plot

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)
plot

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.

Topik
R
Data Science

Kursus R

{count, plural, one {Kursus} other {Kursus}}

Pengantar R

{hours} jam
3.1M
Kuasai dasar analisis data di R, termasuk vectors, lists, dan data frames, lalu praktikkan R dengan data sets nyata.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

{count, plural, one {blog} other {blogs}}

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

{count, plural, one {blog} other {blogs}}

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

{count, plural, one {blog} other {blogs}}

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

{count, plural, one {blog} other {blogs}}

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya