Grafik yang benar secara teknis masih perlu penyesuaian tampilan sebelum ditempatkan pada laporan atau situs. Topik ini membahas tiga langkah penyelesaiannya, yaitu pemilihan tema bawaan, pengaturan elemen tertentu melalui theme(), dan penyimpanan grafik ke berkas dengan ukuran terkendali melalui ggsave(). Setelah langkah-langkah ini diikuti, grafik siap diekspor tanpa penyuntingan manual lagi. Data contohnya adalah rata-rata nilai ujian tiga kelas, dan data yang sama dipakai di seluruh contoh topik ini sehingga perbedaan tampilannya mudah dibandingkan.
Keluarga tema bawaan#
ggplot2 menyertakan beberapa tema lengkap yang mengubah tampilan seluruh grafik sekaligus. Tema bawaan theme_gray() menampilkan latar abu-abu dengan garis kisi putih, sedangkan theme_bw() memakai latar putih berbingkai. theme_minimal() membuang seluruh latar dan bingkai sehingga tersisa garis kisi, dan theme_classic() menyisakan sumbu saja. Pemilihan tema menentukan kesan pertama grafik tanpa mengubah satu pun datanya.
Perbandingan berikut memakai data nilai ujian yang sama dan dimulai dari tema bawaan. Data rata-rata per kelas disiapkan lebih dahulu.
library(tidyverse)
ujian <- tibble(
kelas = rep(c("Kelas A", "Kelas B", "Kelas C"), each = 6),
nilai = c(78, 85, 91, 69, 74, 88,
81, 77, 84, 90, 72, 79,
65, 70, 76, 82, 68, 74)
)
rata <- ujian |>
group_by(kelas) |>
summarize(rata = mean(nilai))── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.2.1 ✔ readr 2.2.0
✔ forcats 1.0.1 ✔ stringr 1.6.0
✔ ggplot2 4.0.3 ✔ tibble 3.3.1
✔ lubridate 1.9.5 ✔ tidyr 1.3.2
✔ purrr 1.2.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errorsBlok berikut merender grafik dengan tema bawaan, sekaligus menyimpannya sebagai berkas SVG melalui ggsave().
p_bawaan <- ggplot(rata, aes(x = kelas, y = rata)) +
geom_col(fill = "#4472C4") +
labs(x = "Kelas", y = "Nilai rata-rata",
title = "Nilai rata-rata ujian per kelas")
ggsave("publikasi-bawaan.svg", p_bawaan, width = 5, height = 3.2)Hasilnya berlatar abu-abu dengan garis kisi putih sebagaimana tampilan default ggplot2.
Tema theme_minimal() diterapkan pada objek p_bawaan yang sama untuk membandingkan hasilnya.
p_minimal <- p_bawaan +
theme_minimal() +
theme(
plot.title = element_text(face = "bold"),
panel.grid.minor = element_blank()
)
ggsave("publikasi-minimal.svg", p_minimal, width = 5, height = 3.2)Hasilnya berlatar putih bersih dengan garis kisi minor yang hilang.
Karena kedua grafik dibangun dari objek p_bawaan yang sama, perbedaannya murni berasal dari tema. Cara ini lebih aman daripada menuliskan ulang seluruh kode grafik, karena data dan pemetaan tidak pernah tersentuh.
Ketika satu tema dipakai untuk seluruh grafik dalam satu laporan, tema dapat ditetapkan sekali di awal sesi melalui theme_set(theme_minimal()), sehingga setiap grafik berikutnya otomatis memakai tema tersebut tanpa perlu dituliskan ulang.
Mengatur elemen tertentu dengan theme()#
Fungsi theme() juga menyasar satu elemen pada satu waktu. Argumennya berupa nama elemen dan fungsi element_*(), misalnya element_text() untuk teks, element_line() untuk garis, dan element_blank() untuk menghapus elemen. Pemakaian paling lazim adalah mempertebal judul, membesarkan label sumbu, atau memindahkan legenda.
Pada grafik sebelumnya, plot.title = element_text(face = "bold") menjadikan judul tebal, dan panel.grid.minor = element_blank() menghapus garis kisi minor. Elemen lain mengikuti pola yang sama, misalnya axis.title = element_text(size = 12) untuk memperbesar label sumbu dan legend.position = "top" untuk memindahkan legenda ke atas. Kombinasi kecil seperti ini biasanya cukup untuk membuat grafik tampil seragam dengan gaya dokumen tempat grafik itu ditempel.
Menyimpan grafik dengan ggsave()#
Fungsi ggsave() menuliskan objek grafik ke berkas, dan formatnya diambil dari ekstensi berkas yang dituju. Ekstensi .svg menghasilkan grafik vektor yang tajam pada ukuran apa pun sehingga cocok untuk situs, sedangkan .png menghasilkan gambar berbasis piksel (raster) yang lazim untuk tayangan presentasi. Dua argumen terpentingnya adalah width dan height.
Blok berikut menyimpan grafik yang sama sebagai PNG di folder sementara sistem, semata untuk membuktikan bahwa mekanisme penyimpanannya sama dengan penyimpanan SVG.
ggsave(file.path(tempdir(), "nilai-ruang-utama.png"), p_minimal,
width = 5, height = 3.2, dpi = 300)
file.exists(file.path(tempdir(), "nilai-ruang-utama.png"))[1] TRUENilai TRUE menegaskan berkas PNG benar-benar dibuat. Argumen dpi hanya berlaku untuk format berbasis piksel seperti PNG, sedangkan berkas SVG tidak memedulikannya karena isinya berupa bentuk geometris, bukan titik warna. Nama berkas pada contoh diarahkan ke tempdir() hanya demi demonstrasi, dan pada pekerjaan nyata tujuannya adalah folder proyek, misalnya output/.
Ukuran ekspor dan rasio aspek#
Ukuran berkas ekspor ditentukan oleh width, height, dan units yang menerima satuan "in" (inci), "cm", atau "px". Nilai defaultnya masing-masing tujuh inci, yang sering terlalu persegi untuk laporan. Grafik untuk laman web umumnya lebih lebar dari tingginya, misalnya rasio 6,5 banding 2,4.
p_lebar <- p_minimal +
labs(title = NULL, x = NULL)
ggsave("publikasi-lebar.svg", p_lebar, width = 6.5, height = 2.4)Grafik yang lebih lebar dengan judul dan label sumbu x yang dihapus menampilkan kelas dan nilainya tanpa hiasan.
Satu konsekuensi yang perlu diperhatikan: ukuran huruf dalam grafik dinyatakan dalam titik (point) dan tidak ikut menyusut ketika berkas diubah ukurannya di dokumen. Grafik yang dibuat terlalu lebar lalu diperkecil di dokumen akan tampak dengan ukuran huruf yang kecil, sehingga ukuran ekspor sebaiknya ditetapkan mendekati ukuran akhir tempat grafik ditempel. Rasio lebar-tinggi yang konsisten antartopik juga membuat rangkaian grafik pada satu laporan terlihat seragam.
Kesalahan umum#
Tiga kekeliruan berikut paling sering muncul saat menyimpan grafik.
ggsave()tanpa argumenplotmenyimpan grafik TERAKHIR yang dirender, bukan grafik yang sedang dikerjakan. Setelah serangkaian eksperimen grafik, berkas yang tersimpan bisa bukan yang dimaksud. Selalu berikanplot = patau tulisggsave("nama.svg", p, ...).- Mengubah
dpipada berkas SVG tidak berpengaruh apa pun, karena SVG adalah format vektor. Parameter tersebut hanya bermakna untuk PNG, JPEG, dan format berbasis piksel lainnya. - Mengecilkan grafik dengan mengecilkan huruf di
theme(). Penyusutan ukuran seharusnya dikerjakan lewatwidthdanheightsaat ekspor, sehingga proporsi huruf terhadap grafik tetap wajar saat ditampilkan.
Ringkasan#
- Tema bawaan seperti
theme_minimal()dantheme_bw()mengubah tampilan seluruh grafik sekali panggil, sedangkantheme()menyasar satu elemen tertentu, misalnya judul atau legenda. theme_set()menetapkan tema untuk seluruh sesi sehingga semua grafik seragam tanpa pengulangan kode.ggsave()menentukan format dari ekstensi berkasnya, SVG untuk grafik vektor situs, PNG untuk tayangan berbasis piksel, denganwidth,height,units, dandpimengendalikan ukurannya.- Ukuran ekspor sebaiknya mendekati ukuran akhir grafik di dokumen karena ukuran huruf tidak ikut menskala.
Referensi#
- ggplot2: Elegant Graphics for Data Analysis — tidyverse
— Dokumentasi resmi paket, mencakup tema dan
ggsave(). - ggplot2: Elegant Graphics for Data Analysis, edisi ke-3 — Hadley Wickham, Danielle Navarro, Thomas Lin Pedersen — Buku resmi ggplot2, bab penyempurnaan tema dan penyimpanan grafik.
- R for Data Science, edisi ke-2 — Wickham, Çetinkaya-Rundel, Grolemund — Bab komunikasi hasil analisis melalui grafik dan pelaporan.