boxplot() di R: Cara Membuat BoxGrafik di RStudio
⚡ Ringkasan Cerdas
BoxFungsi `plot` di R merangkum distribusi numerik melalui median, kuartil, garis batas (whiskers), dan outlier menggunakan `geom_boxplot()` dari `ggplot2`. Panduan ini membangun plot kotak pada dataset kualitas udara dan menambahkan lapisan warna, titik, jitter, lekukan, dan perbandingan kelompok.

boxplot() di R
boxplot() di R membantu memvisualisasikan distribusi data berdasarkan kuartil dan mendeteksi keberadaan outlier. Anda dapat menggunakan objek geometri geom_boxplot() dari pustaka ggplot2 untuk menggambar boxplot() di R.
Kita akan menggunakan dataset kualitas udara untuk memperkenalkan fungsi boxplot() di R dengan ggplot. Dataset ini mencatat pengukuran kualitas udara harian di New York dari Mei hingga September 1973 dan berisi 153 pengamatan. Kita akan menggunakan variabel-variabel berikut:
- Ozon: Variabel numerik
- Angin: Variabel numerik
- Bulan: Mei hingga September. Variabel numerik
Sebelum menggambarnya, ada baiknya mengetahui dengan tepat apa yang diwakili oleh setiap bagian dari kotak tersebut.
Cara Membaca Box Grafik: Kuartil, IQR, dan Pencilan
Setiap elemen dalam diagram kotak (box plot) mewakili satu angka dari ringkasan lima angka tersebut. Mengetahui angka mana yang mana mengubah grafik dari sekadar hiasan menjadi analisis.
- Engsel bawah: Kuartil pertama, Q1. Dua puluh lima persen dari pengamatan berada di bawahnya.
- Garis median: Kuartil kedua. Posisinya di dalam kotak menunjukkan kemiringan: garis yang terdorong ke bawah berarti data miring ke kanan.
- Engsel atas: Kuartil ketiga, Q3. Tujuh puluh lima persen dari pengamatan berada di bawahnya.
- Box tinggi: Rentang interkuartil, IQR = Q3 – Q1, yang mencakup separuh data di tengah dan merupakan ukuran penyebaran yang standar dan kuat.
- Cambang: Nilai-nilai tersebut meluas hingga pengamatan paling ekstrem yang masih berada dalam rentang 1.5 kali IQR dari titik terdekat. Nilai-nilai tersebut bukanlah nilai minimum dan maksimum.
- Poin-poin di luar garis kumis: observasi yang ditandai sebagai outlier oleh aturan IQR 1.5 tersebut.
Dua hal yang perlu diperhatikan. Pertama, "outlier" di sini adalah penanda statistik, bukan kesalahan: dalam distribusi miring seperti konsentrasi ozon, nilai tinggi memang diharapkan dan tidak boleh dihapus. Kedua, plot kotak menyembunyikan bentuk distribusi, sehingga dua kelompok dengan kotak yang identik dapat memiliki data dasar yang sangat berbeda. Menambahkan titik-titik yang diacak, seperti yang ditunjukkan di bawah ini, dapat mencegah hal tersebut.
Box Plot vs Histogram vs Violin Plot di R
Ketiga grafik tersebut menggambarkan distribusi numerik, tetapi masing-masing mengungkapkan sesuatu yang disembunyikan oleh grafik lainnya.
| Kriteria | Box Merencanakan | Histogram | Plot Biola |
|---|---|---|---|
| Pertunjukkan | Median, kuartil, outlier | Frekuensi di setiap bin | Kurva kepadatan penuh |
| Revbeberapa puncak | Tidak | Ya | Ya |
| Bendera data pencilan | Ya, secara eksplisit | Hanya secara visual | Tidak secara langsung |
| Membandingkan banyak kelompok | Sangat baik | Canggung | baik |
| Membutuhkan pilihan penyetelan | Tidak | Ya, hitungan bin | Ya, bandwidth |
| objek ggplot2 | geom_boxplot() | histogram geo | geom_violin() |
Kompromi yang umum adalah menggambar plot biola dengan plot kotak sempit di dalamnya, yang mempertahankan bentuk kepadatan dan ringkasan kuartil dalam satu grafik. Lihat tutorial histogram untuk sisi pengelompokan dalam perbandingan.
membuat Box Merencanakan
Sebelum Anda mulai membuat boxplot() pertama Anda di R, Anda perlu memanipulasi data sebagai berikut:
- Langkah 1: Impor data
- Langkah 2: Hilangkan variabel yang tidak perlu
- Langkah 3: Ubah Bulan menjadi faktor terurut
- Langkah 4: Buat variabel kategorikal baru yang membagi setiap bulan menjadi tiga bagian: Awal, Tengah, dan Akhir
- Langkah 5: Hapus observasi yang hilang
Semua langkah ini dilakukan dengan dplyr dan operator saluran pipa %>%.
library(dplyr) library(ggplot2) # Step 1 data_air <- airquality %>% #Step 2 select(-c(Solar.R, Temp)) %>% #Step 3 mutate(Month = factor(Month, order = TRUE, labels = c("May", "June", "July", "August", "September")), #Step 4 day_cat = factor(ifelse(Day < 10, "Begin", ifelse(Day < 20, "Middle", "End"))))
Praktik yang baik adalah memeriksa struktur data dengan fungsi sekilas().
glimpse(data_air)
Keluaran:
## Observations: 153 ## Variables: 5 ## $ Ozone <int> 41, 36, 12, 18, NA, 28, 23, 19, 8, NA, 7, 16, 11, 14, ... ## $ Wind <dbl> 7.4, 8.0, 12.6, 11.5, 14.3, 14.9, 8.6, 13.8, 20.1, 8.6... ## $ Month <ord> May, May, May, May, May, May, May, May, May, May, May,... ## $ Day <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,... ## $ day_cat <fctr> Begin, Begin, Begin, Begin, Begin, Begin, Begin, Begi...
Baik Ozone maupun Solar.R mengandung nilai NA. Karena geom_boxplot() akan menghapusnya secara diam-diam dan mencetak peringatan, akan lebih baik untuk menghapusnya secara eksplisit.
# Step 5
data_air_nona <-data_air %>% na.omit()
Diagram kotak dasar
Sekarang, gambarkan sebaran ozon berdasarkan bulan.
# Store the graph box_plot <- ggplot(data_air_nona, aes(x = Month, y = Ozone)) # Add the geometric object box plot box_plot + geom_boxplot()
Code Penjelasan
- Simpan grafik untuk digunakan lebih lanjut
- box_plot: plot dasar disimpan dalam objek box_plot, yang memungkinkan Anda menambahkan lapisan nanti tanpa mengulangi seluruh panggilan.
- Tambahkan objek geometris
- Anda meneruskan dataset data_air_nona ke ggplot boxplot.
- Di dalam argumen aes(), Anda menambahkan sumbu x dan sumbu y.
- Tanda + berarti Anda ingin R terus membaca kode tersebut. Tanda ini membuat kode lebih mudah dibaca dengan memecahnya.
- Gunakan geom_boxplot() untuk membuat diagram kotak
Keluaran:
Ubah sisi grafik
Anda dapat membalik sisi grafik.
box_plot +
geom_boxplot()+
coord_flip()
Code Penjelasan
- box_plot: Anda menggunakan grafik yang Anda simpan. Ini menghindari penulisan ulang semua kode setiap kali Anda menambahkan informasi baru ke grafik.
- geom_boxplot(): menggambar kotak dan kumis.
- coord_flip(): Membalik sisi grafik
Keluaran:
Ubah warna outlier
Anda dapat mengubah warna, bentuk, dan ukuran outlier.
box_plot +
geom_boxplot(outlier.colour = "red",
outlier.shape = 2,
outlier.size = 3) +
theme_classic()
Code Penjelasan
- outlier.colour=”red”: Mengontrol warna outlier
- outlier.shape=2: Mengubah bentuk outlier. 2 mengacu pada segitiga
- outlier.size=3: Mengubah ukuran segitiga. Angka yang lebih besar akan menghasilkan penanda yang lebih besar.
Keluaran:
Tambahkan statistik ringkasan
Anda dapat menambahkan statistik ringkasan seperti rata-rata kelompok, yang tidak ditampilkan oleh diagram kotak itu sendiri.
box_plot +
geom_boxplot() +
stat_summary(fun.y = mean,
geom = "point",
size = 3,
color = "steelblue") +
theme_classic()
Code Penjelasan
- stat_summary() menambahkan statistik terhitung di atas box plot.
- Argumen `fun` mengontrol statistik mana yang dikembalikan. Di sini, nilainya adalah rata-rata. Perhatikan bahwa kode lama menggunakan `fun.y`, yang sudah usang di ggplot2 sejak versi 3.3.0.
- Catatan: Statistik lain tersedia seperti min dan maks. Lebih dari satu statistik dapat ditampilkan dalam grafik yang sama
- geom = “point”: Plot rata-rata dengan sebuah titik
- size=3 : Ukuran titik
- color =”steelblue”: Warna titik
Keluaran:
Box Plot dengan Titik
Selanjutnya, tambahkan lapisan plot titik di atas kotak-kotak tersebut. Setiap titik mewakili satu pengamatan, yang membuat ukuran sampel di balik setiap kotak terlihat.
box_plot +
geom_boxplot() +
geom_dotplot(binaxis = 'y',
dotsize = 1,
stackdir = 'center') +
theme_classic()
Code Penjelasan
- geom_dotplot() menggambar satu titik per pengamatan, yang ditumpuk di dalam setiap bin.
- binaxis='y': Mengubah posisi titik di sepanjang sumbu y. Secara default, sumbu x
- dotsize=1 : Ukuran titik
- stackdir='center': Cara menumpuk titik-titik: Empat nilai:
- "naik" (default),
- "turun"
- "tengah"
- “keseluruhan tengah”
Keluaran:
Kontrol Estetika Box Merencanakan
Ubah warna kotak
Anda dapat mengubah warna grup.
ggplot(data_air_nona, aes(x = Month, y = Ozone, color = Month)) + geom_boxplot() + theme_classic()
Code Penjelasan
- Warna grup dikontrol dalam peta aes().pingAnda dapat menggunakan color=Month untuk mengubah warna plot kotak dan kumis sesuai dengan bulan.
Keluaran:
Box plot dengan banyak kelompok
Dimungkinkan juga untuk menambahkan beberapa grup. Anda dapat memvisualisasikan perbedaan kualitas udara menurut hari pengukuran.
ggplot(data_air_nona, aes(Month, Ozone)) + geom_boxplot(aes(fill = day_cat)) + theme_classic()
Code Penjelasan
- Peta aes()ping Objek geometris mengontrol grup yang akan ditampilkan (variabel ini harus berupa faktor)
- aes(fill= day_cat) memungkinkan pembuatan tiga kotak untuk setiap bulan di sumbu x
Keluaran:
Box Plot dengan Titik-Titik Bergetar
Cara lain untuk menampilkan pengamatan individual adalah dengan titik-titik yang diacak (jittered points). Pengacakan biasanya dipilih ketika sumbu x kategorikal menyebabkan banyak titik berada pada posisi yang sama.
Metode ini menghindari tumpang tindih.ping dari data diskrit.
box_plot +
geom_boxplot() +
geom_jitter(shape = 15,
color = "steelblue",
position = position_jitter(width = 0.21)) +
theme_classic()
Code Penjelasan
- geom_jitter() menambahkan pergeseran acak kecil ke setiap titik sehingga terjadi tumpang tindih.ping nilai menjadi terlihat.
- shape=15 mengubah bentuk titik. 15 mewakili kotak
- color = “steelblue”: Mengubah warna titik
- position = position_jitter(width = 0.21): mengontrol seberapa jauh titik-titik digeser ke samping, diukur dalam satuan sumbu x. Nilai default adalah 40 persen dari jarak antar kategori.
Keluaran:
Terlihat perbedaan antara grafik pertama dengan metode jitter dan grafik kedua dengan metode titik.
box_plot +
geom_boxplot() +
geom_point(shape = 5,
color = "steelblue") +
theme_classic()
Berkumai Box Merencanakan
Fitur menarik dari geom_boxplot() adalah fungsi boxplot berlekuk di R. Plot berlekuk mempersempit kotak di sekitar median. Tujuan utama dari plot kotak berlekuk adalah untuk membandingkan signifikansi median antar kelompok. Ada bukti kuat bahwa dua kelompok memiliki median yang berbeda ketika lekukan tidak tumpang tindih. Lekuk dihitung sebagai berikut:
Di sini IQR adalah rentang interkuartil dan n adalah jumlah pengamatan dalam kelompok. Lekukan tersebut mencakup kira-kira interval kepercayaan 95 persen dari median.
box_plot +
geom_boxplot(notch = TRUE) +
theme_classic()
Code Penjelasan
- geom_boxplot(notch = TRUE): menggambar box plot dengan takik di sekitar median
Keluaran:
Cara Menambahkan Judul, Label, dan Warna Kustom ke sebuah Box Plot di R
Grafik di atas menggunakan pengaturan default ggplot2, yang mengambil nama variabel langsung dari data frame. Grafik yang layak dipublikasikan membutuhkan label yang mudah dibaca dan palet warna yang terencana.
Judul dan label sumbu. Satu panggilan labs() mengatur setiap elemen teks:
box_plot +
geom_boxplot(fill = "coral", alpha = 0.7) +
labs(title = "Ozone concentration by month",
subtitle = "New York, May to September 1973",
x = "Month",
y = "Ozone (parts per billion)",
caption = "Source: airquality dataset") +
theme_classic()
Pilih warna Anda sendiri. Gunakan scale_fill_manual() ketika fill dipetakan di dalam aes(), dan scale_colour_manual() ketika colour adalah:
ggplot(data_air_nona, aes(x = Month, y = Ozone, fill = Month)) + geom_boxplot() + scale_fill_manual(values = c("#0e9cd1", "coral", "#7dc27d", "#c9a227", "grey60")) + theme_classic() + theme(legend.position = "none")
Legenda dimatikan di sini karena sumbu x sudah menyebutkan setiap bulan, jadi mengulanginya akan membuang ruang.
Menyusun ulang kotak-kotak tersebut. Tingkat faktor menentukan urutan pada sumbu. Karena Bulan dibuat sebagai faktor yang diurutkan, maka urutannya sudah kronologis. Untuk faktor yang tidak diurutkan, urutkan berdasarkan median:
ggplot(data_air_nona, aes(x = reorder(Month, Ozone, FUN = median), y = Ozone)) + geom_boxplot() + theme_classic()
Menyimpan grafik. Fungsi ggsave() menyimpan plot terakhir ke disk pada resolusi yang dapat Anda kendalikan:
ggsave("ozone_boxplot.png", width = 8, height = 5, dpi = 300)
Box Plot di R: Code Referensi
Tabel di bawah ini mencantumkan perintah ggplot2 untuk setiap varian box plot yang dibahas di atas:
| Tujuan | Code |
|---|---|
| Diagram kotak dasar |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() |
| Balikkan orientasinya |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + coord_flip() |
| Plot kotak berlekuk |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(notch = TRUE) |
| Box plot dengan titik-titik yang gelisah |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + geom_jitter(position = position_jitter(0.21)) |
| Warnai berdasarkan kelompok |
ggplot(df, aes(x = x1, y = y, color = x1)) + geom_boxplot() |
| Beberapa grup per kategori |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(aes(fill = x2)) |
| Tambahkan rata-rata kelompok |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + stat_summary(fun = mean, geom = "point") |
Juga Periksa: - Tutorial R untuk Pemula: Belajar Bahasa Pemrograman R











