Diagram Sebar di R Menggunakan ggplot2 dengan Contoh
⚡ Ringkasan Cerdas
Plot sebaran di R menggunakan ggplot2 memetakan dua variabel kontinu ke sumbu x dan y dengan geom_point(). Panduan ini mencakup pengelompokanping dengan warna, transformasi logaritma, garis regresi yang sesuai, label, pembagian faset, perbaikan plot tumpang tindih, skala, tema, dan penyimpanan.

Mengapa Grafik Penting dalam Analisis Data
Grafik adalah bagian ketiga dari proses analisis data. Bagian pertama adalah tentang data extracproduksi, bagian kedua membahas membersihkan dan memanipulasi data. Pada akhirnya, data scientist mungkin perlu melakukannya mengkomunikasikan hasilnya secara grafis.
Alur kerja seorang ilmuwan data diringkas dalam gambar di bawah ini.
- Tugas pertama seorang data scientist adalah mendefinisikan pertanyaan penelitian. Pertanyaan penelitian ini tergantung pada maksud dan tujuan proyek.
- Setelah itu, salah satu tugas yang paling menonjol adalah rekayasa fitur. Ilmuwan data perlu mengumpulkan, memanipulasi, dan membersihkan data
- Ketika langkah ini selesai, dia bisa mulai menjelajahi kumpulan data. Terkadang, hipotesis awal perlu disempurnakan dan diubah karena adanya penemuan baru.
- Ketika jelas analisis tercapai, ilmuwan data harus mempertimbangkan kapasitas pembaca untuk melakukannya memahami konsep dan model yang mendasarinya.
- Hasilnya harus disajikan dalam format yang dapat dipahami oleh semua pemangku kepentingan. Salah satu metode terbaik untuk melakukannya menyampaikan hasilnya melalui a grafik.
- Grafik merupakan alat yang luar biasa untuk menyederhanakan analisis yang rumit.
Bagian selanjutnya dari tutorial ini akan membuat grafik-grafik tersebut menggunakan paket ggplot2.
Paket ggplot2
Tutorial ini berfokus pada pembuatan grafik di R menggunakan ggplot2.
Dalam tutorial ini, Anda akan menggunakan paket ggplot2. Paket ini mengimplementasikan Grammar of Graphics yang dijelaskan oleh Leland Wilkinson pada tahun 2005. ggplot2 fleksibel, dilengkapi dengan banyak tema, dan memungkinkan Anda untuk menentukan plot pada tingkat absolut yang tinggi.tracPerlu dicatat bahwa program ini tidak menghasilkan grafik tiga dimensi atau interaktif; grafik tersebut memerlukan paket seperti plotly atau rgl.
Dalam ggplot2, grafik tersusun dari argumen berikut:
- data
- peta estetikaping
- objek geometris
- transformasi statistik
- sisik
- sistem koordinasi
- penyesuaian posisi
- faceting
Anda akan mempelajari cara mengontrol argumen tersebut di tutorial.
Sintaks dasar ggplot2 adalah:
ggplot(data, mapping=aes()) + geometric object arguments: data: Dataset used to plot the graph mapping: Control the x and y-axis geometric object: The type of plot you want to show. The most common object are: - Point: `geom_point()` - Bar: `geom_bar()` - Line: `geom_line()` - Histogram: `geom_histogram()`
Cara Membuat Scatter Plot di R
Mari kita lihat cara kerja ggplot dengan kumpulan data mtcars. Anda mulai dengan membuat plot sebar dari variabel mpg dan variabel drat.
Plot pencar dasar
library(ggplot2) ggplot(mtcars, aes(x = drat, y = mpg)) + geom_point()
Code Penjelasan
- Pertama-tama Anda meneruskan kumpulan data mtcars ke ggplot.
- 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_point() untuk objek geometris.
Keluaran:
Sebarkan plot dengan kelompok
Terkadang, menarik untuk membedakan nilai berdasarkan sekelompok data (yaitu data tingkat faktor).
ggplot(mtcars, aes(x = mpg, y = drat)) + geom_point(aes(color = factor(gear)))
Code Penjelasan
- Fungsi aes() di dalam geom_point() mengontrol warna setiap grup. Grup tersebutping Variabel harus berupa faktor, jadi gear dibungkus dalam factor().
- Secara keseluruhan, Anda memiliki kode aes(color = factor(gear)) yang mengubah warna titik.
Keluaran:
Ubah Skala Sumbu dengan Transformasi Logaritma
Mengubah skala data merupakan bagian besar dari pekerjaan analis, karena variabel mentah jarang datang dalam bentuk lonceng yang rapi. Mengambil logaritma adalah salah satu cara untuk memampatkan nilai ekstrem dan membuat plot kurang sensitif terhadap outlier.
ggplot(mtcars, aes(x = log(mpg), y = log(drat))) + geom_point(aes(color = factor(gear)))
Code Penjelasan
- Anda mengubah variabel x dan y di dalam fungsi log() langsung di dalam fungsi map aes().ping.
Perhatikan bahwa transformasi lain apa pun dapat diterapkan seperti standardisasi atau normalisasi.
Keluaran:
Plot sebar dengan nilai yang sesuai
Anda dapat menambahkan tingkat informasi lain ke grafik. Anda dapat menumpuk nilai yang sesuai dari suatu data. regresi linier.
my_graph <- ggplot(mtcars, aes(x = log(mpg), y = log(drat))) + geom_point(aes(color = factor(gear))) + stat_smooth(method = "lm", col = "#C42126", se = FALSE, size = 1) my_graph
Code Penjelasan
- my_graph: plot disimpan dalam objek my_graph, sehingga langkah selanjutnya dapat menambahkan layer tanpa mengulangi seluruh panggilan.
- Argumen stat_smooth() mengontrol metode penghalusan
- metode = “lm”: Regresi linier
- kolom = “#C42126”: Code untuk warna merah garis
- se = FALSE: Tidak menampilkan kesalahan standar
- size = 1: ketebalan garis. Pada ggplot2 3.4.0 dan versi yang lebih baru, argumen ini diganti namanya menjadi linewidth untuk geometri garis.
Keluaran:
Perhatikan bahwa metode penghalusan lain juga tersedia
- glm
- gam
- loess: nilai default untuk kurang dari 1,000 pengamatan
- rlm: model linier yang kuat, dari paket MASS
Sebelum menata grafik, ada baiknya mengetahui kapan scatter plot merupakan pilihan yang tepat.
Grafik Sebar vs Grafik Garis vs Bubble Bagan di R
Ketiga grafik tersebut membandingkan dua variabel kontinu, sehingga pilihan bergantung pada apa yang seharusnya dipahami oleh pembaca.
| Kriteria | Plot Pencar | Line Chart | Bubble Bagan |
|---|---|---|---|
| Pertunjukkan | Korelasi antara dua variabel | Perubahan satu variabel pada sumbu berurutan | Korelasi ditambah besaran ketiga |
| sumbu X | Variabel kontinu apa pun | Biasanya berdasarkan waktu atau skala terurut lainnya. | Variabel kontinu apa pun |
| Urutan poin | Tidak relevan | Penting, poin-poinnya saling terhubung. | Tidak relevan |
| Variabel ketiga | Melalui warna atau bentuk | Melalui jalur terpisah | Melalui ukuran titik |
| panggilan ggplot2 | geom_point() | garis geom() | geom_point(aes(size = z)) |
Menghubungkan titik-titik sebaran dengan garis ketika sumbu x tidak memiliki urutan alami adalah kesalahan umum: hal itu menyiratkan urutan yang tidak ada. Gunakan geom_line() hanya untuk sumbu yang berurutan seperti tanggal. Untuk distribusi variabel tunggal, gunakan petak kotak sebagai gantinya.
Tambahkan informasi ke grafik
Sejauh ini grafik-grafik tersebut belum disertai teks penjelasan. Pembaca seharusnya dapat memahami cerita dalam data hanya dari grafik saja, tanpa perlu melihat dokumentasi tambahan, yang berarti grafik tersebut membutuhkan label yang baik. Anda dapat menambahkan label dengan fungsi labs().
Sintaks dasar untuk labs() adalah:
labs(title = "Hello Guru99") arguments: - title: Main title displayed above the plot - subtitle: Secondary line below the title - caption: Note below the plot, usually the data source - x: Rename the x-axis - y: Rename the y-axis - color / fill: Rename the legend Example: labs(title = "Hello Guru99", subtitle = "My first plot")
Tambahkan judul
Salah satu informasi wajib untuk ditambahkan jelas merupakan judul.
my_graph +
labs(
title = "Plot Mile per hours and drat, in log"
)
Code Penjelasan
- my_graph: Anda menggunakan grafik yang Anda simpan. Ini menghindari penulisan ulang semua kode setiap kali Anda menambahkan informasi baru ke grafik.
- Anda membungkus judul di dalam labs().
Keluaran:
Tambahkan judul dengan nama dinamis
Judul dinamis berguna untuk menambahkan informasi yang lebih tepat pada judul.
Anda dapat menggunakan fungsi paste() untuk mencetak teks statis dan teks dinamis. Sintaks dasar paste() adalah:
paste("This is a text", A) arguments - " ": Text inside the quotation marks are the static text - A: Display the variable stored in A - Note you can add as much static text and variable as you want. You need to separate them with a comma
Contoh:
A <- 2010
paste("The first year is", A)
Keluaran:
## [1] "The first year is 2010"
B <- 2018
paste("The first year is", A, "and the last year is", B)
Keluaran:
## [1] "The first year is 2010 and the last year is 2018"
Anda dapat menambahkan nama dinamis ke grafik kami, yaitu rata-rata mpg.
mean_mpg <- mean(mtcars$mpg) my_graph + labs( title = paste("Plot Mile per hours and drat, in log. Average mpg is", mean_mpg) )
Code Penjelasan
- Anda membuat rata-rata mpg dengan mean(mtcars$mpg) yang disimpan dalam variabel mean_mpg
- Anda menggunakan paste() dengan mean_mpg untuk membuat judul dinamis yang mengembalikan nilai rata-rata mpg
Keluaran:
Tambahkan subtitle
Dua detail tambahan membuat grafik lebih jelas. Anda berbicara tentang subjudul dan keterangan. Subjudul diletakkan tepat di bawah judul. Keterangan dapat memberikan informasi tentang siapa yang melakukan perhitungan dan sumber data.
my_graph +
labs(
title =
"Relation between Mile per hours and drat",
subtitle =
"Relationship break down by gear class",
caption = "Authors own computation"
)
Code Penjelasan
- Di dalam labs(), Anda menambahkan:
- title = “Hubungan antara Mile per jam dan drat”: Tambahkan judul
- subtitle = “Hubungan dipecah berdasarkan kelas perlengkapan”: Tambahkan subtitle
- caption = “Perhitungan penulis sendiri: Tambahkan keterangan
- Anda memisahkan setiap informasi baru dengan koma, ,
- Perhatikan bahwa Anda merusak baris kode. Ini tidak wajib, dan hanya membantu membaca kode dengan lebih mudah
Keluaran:
Ganti nama sumbu x dan sumbu y
Nama kolom jarang sekali siap untuk presentasi. Nama-nama tersebut sering disingkat atau menggunakan garis bawah di antara kata-kata, seperti GDP_CAP. Ubah nama kolom pada grafik dan tambahkan satuan di tempat yang relevan.
my_graph +
labs(
x = "Drat definition",
y = "Mile per hours",
color = "Gear",
title = "Relation between Mile per hours and drat",
subtitle = "Relationship break down by gear class",
caption = "Authors own computation"
)
Code Penjelasan
- Di dalam labs(), Anda menambahkan:
- x = “Definisi Drat”: Mengubah nama sumbu x
- y = “Mil per jam”: Ubah nama sumbu y
Keluaran:
Kendalikan timbangannya
Anda dapat mengontrol skala sumbu.
Fungsi seq() berguna saat Anda perlu membuat urutan angka. Sintaks dasarnya adalah:
seq(begin, last, by = x)
arguments:
- begin: First number of the sequence
- last: Last number of the sequence
- by= x: The step. For instance, if x is 2, the code adds 2 to `begin-1` until it reaches `last`
Sebagai contoh, rentang angka dari 0 hingga 12 dengan langkah 4 akan menghasilkan empat angka: 0, 4, 8, dan 12.
seq(0, 12,4)
Keluaran:
## [1] 0 4 8 12
Anda dapat mengontrol skala sumbu x dan sumbu y seperti di bawah ini
my_graph +
scale_x_continuous(breaks = seq(1, 3.6, by = 0.2)) +
scale_y_continuous(breaks = seq(1, 1.6, by = 0.1)) +
labs(
x = "Drat definition",
y = "Mile per hours",
color = "Gear",
title = "Relation between Mile per hours and drat",
subtitle = "Relationship break down by gear class",
caption = "Authors own computation"
)
Code Penjelasan
- Fungsi scale_y_continuous() mengontrol sumbu y
- Fungsi scale_x_continuous() mengontrol sumbu x.
- Parameter break mengontrol pemisahan sumbu. Anda dapat menambahkan urutan nomor secara manual atau menggunakan fungsi seq():
- seq(1, 3.6, by = 0.2): Buat urutan dari 1 hingga 3.6 dengan langkah 0.2, yaitu 14 titik henti.
- seq(1, 1.6, by = 0.1): Buat tujuh angka dari 1 hingga 1.6 dengan langkah 0.1
Keluaran:
Tema
Terakhir, ggplot2 memungkinkan Anda mengubah gaya seluruh plot dengan satu fungsi tema. Delapan tema lengkap disertakan dalam paket ini:
- tema_bw()
- tema_cahaya()
- tema_klasik()
- tema_linedraw()
- tema_gelap()
- tema_minimal()
- tema_abu-abu()
- tema_void()
my_graph +
theme_dark() +
labs(
x = "Drat definition, in log",
y = "Mile per hours, in log",
color = "Gear",
title = "Relation between Mile per hours and drat",
subtitle = "Relationship break down by gear class",
caption = "Authors own computation"
)
Keluaran:
Simpan Plot
Setelah semua langkah ini, saatnya untuk menyimpan dan membagikan grafik Anda. Panggil ggsave(“nama_file.png”) segera setelah membuat grafik dan gambar akan ditulis ke disk.
Grafik disimpan di direktori kerja. Untuk memeriksa direktori kerja, Anda dapat menjalankan kode ini:
directory <- getwd() directory
Gambarlah grafik yang sudah jadi, simpan, dan periksa di mana letaknya:
my_graph +
theme_dark() +
labs(
x = "Drat definition, in log",
y = "Mile per hours, in log",
color = "Gear",
title = "Relation between Mile per hours and drat",
subtitle = "Relationship break down by gear class",
caption = "Authors own computation"
)
Keluaran:
ggsave("my_fantastic_plot.png")
Keluaran:
## Saving 5 x 4 in image
Note: Untuk tujuan pedagogi saja, kami membuat fungsi bernama open_folder() untuk membuka folder direktori untuk Anda. Anda hanya perlu menjalankan kode di bawah ini dan melihat di mana gambar tersebut disimpan. Anda akan melihat nama file my_fantastic_plot.png.
# Run this code to create the function open_folder <- function(dir) { if (.Platform['OS.type'] == "windows") { shell.exec(dir) } else { system(paste(Sys.getenv("R_BROWSER"), dir)) } } # Call the function to open the folder open_folder(directory)
Cara Membuat Plot Sebar Berfaset di R dengan facet_wrap()
Faceting adalah salah satu dari delapan komponen ggplot2 yang disebutkan sebelumnya, dan merupakan solusi paling rapi untuk grafik yang terlalu padat. Alih-alih memadatkan setiap kelompok ke dalam satu panel, ggplot2 menggambar multiple kecil untuk setiap level variabel, semuanya pada skala yang sama sehingga panel tetap dapat dibandingkan.
# One panel per gear count ggplot(mtcars, aes(x = drat, y = mpg)) + geom_point() + facet_wrap(~ gear) + theme_classic()
Tiga argumen tersebut melakukan sebagian besar pekerjaan.
- ncol or sekarang: paksa panel-panel tersebut ke dalam tata letak tertentu, misalnya facet_wrap(~ gear, ncol = 2).
- sisikSecara default diatur ke “fixed” sehingga setiap panel memiliki rentang sumbu yang sama. Gunakan “free_y” atau “free” ketika kelompok-kelompok tersebut memiliki perbedaan besar, tetapi perlu diingat bahwa skala bebas membuat perbandingan visual antar panel menjadi menyesatkan.
- pemberi label: mengganti level faktor mentah di setiap strip, misalnya labeller = label_both untuk mencetak “gear: 4” alih-alih “4”.
Dua kelompokping variabel. Gunakan facet_grid() untuk membangun matriks panel, dengan variabel pertama di sepanjang baris dan variabel kedua di sepanjang kolom:
ggplot(mtcars, aes(x = drat, y = mpg)) + geom_point(aes(color = factor(cyl))) + facet_grid(am ~ gear) + theme_classic()
Faset atau warna? Warna berfungsi dengan baik hingga sekitar empat grup pada grafik dengan tumpang tindih yang terbatas. Di luar itu, atau kapan pun grup-grup tersebut tumpang tindih secara signifikan, pembagian faset lebih mudah dibaca karena setiap panel hanya memuat poinnya sendiri. Anda dapat menggabungkan keduanya: membagi faset berdasarkan satu variabel dan warna berdasarkan variabel lain, seperti pada contoh facet_grid() di atas.
Cara Mengatasi Tumpang Tindih pada Grafik Sebar R
Dengan beberapa lusin pengamatan, setiap titik terlihat. Dengan ribuan, penanda bertumpuk satu sama lain dan wilayah terpadat hanya terbaca sebagai gumpalan padat. Itulah overploting, dan ggplot2 menawarkan empat solusi standar.
1. Kurangi opasitas. Solusi termurah. Tumpang tindihping Titik-titik tersebut menggelap secara alami, sehingga kepadatannya menjadi terlihat:
ggplot(diamonds, aes(x = carat, y = price)) + geom_point(alpha = 0.05) + theme_classic()
2. Nilai diskrit jitter. Ketika suatu variabel hanya mengambil beberapa nilai, titik-titik tersebut akan berada pada koordinat yang sama. Pergeseran acak kecil memisahkan mereka:
ggplot(mtcars, aes(x = factor(cyl), y = mpg)) + geom_jitter(width = 0.15, height = 0) + theme_classic()
Atur tinggi = 0 agar nilai y, yang membawa informasi sebenarnya, tidak pernah diubah.
3. Buang pesawat itu. Untuk kumpulan data besar, hitung pengamatan per sel dan petakan jumlah tersebut ke warna. Kotak heksagonal menghindari artefak visual yang dihasilkan oleh kotak persegi:
ggplot(diamonds, aes(x = carat, y = price)) + geom_hex(bins = 40) + theme_classic()
4. Gambarlah kontur kepadatan. Garis kontur menguraikan wilayah tempat pengamatan terkonsentrasi, dan garis-garis tersebut tersusun rapi di atas titik-titik yang memudar:
ggplot(diamonds, aes(x = carat, y = price)) + geom_point(alpha = 0.05) + geom_density_2d(color = "#C42126") + theme_classic()
Sebagai aturan umum, alpha menangani beberapa ribu titik, pengelompokan heksagonal menangani puluhan ribu, dan pengambilan sampel data dengan dplyr::slice_sample() adalah pilihan pragmatis di luar itu.
Diagram Sebar di R: Code Referensi
Tabel di bawah ini mencantumkan panggilan ggplot2 untuk setiap opsi yang dibahas di atas:
| Tujuan | Code |
|---|---|
| Plot pencar dasar |
ggplot(df, aes(x = x1, y = y)) + geom_point() |
| Diagram sebar dengan kelompok warna |
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x2))) |
| Tambahkan nilai yang sesuai |
ggplot(df, aes(x = x1, y = y)) + geom_point() + stat_smooth(method = "lm") |
| Tambahkan judul |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(title = paste("Hello Guru99")) |
| Tambahkan subtitle |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(subtitle = paste("Hello Guru99")) |
| Ganti nama x |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(x = "X1") |
| Ganti nama kamu |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(y = "y1") |
| Kontrol skalanya |
ggplot(df, aes(x = x1, y = y)) + geom_point() + scale_y_continuous(breaks = seq(10, 35, by = 10)) + scale_x_continuous(breaks = seq(2, 5, by = 1)) |
| Buat log |
ggplot(df, aes(x = log(x1), y = log(y))) + geom_point() |
| Tema |
ggplot(df, aes(x = x1, y = y)) + geom_point() + theme_classic() |
| Aspek oleh sebuah kelompok |
ggplot(df, aes(x = x1, y = y)) + geom_point() + facet_wrap(~ x2) |
| Tangani tumpang tindih plot. |
ggplot(df, aes(x = x1, y = y)) + geom_point(alpha = 0.3) |
| Simpan |
ggsave("my_fantastic_plot.png")
|












