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.

  • 📍 Sintaks Dasar: ggplot(mtcars, aes(x = drat, y = mpg)) + geom_point() membangun plot dari data, petapingdan geometri.
  • 🎨 Mewarnai Kelompok: aes(color = factor(gear)) di dalam geom_point() membagi titik-titik menjadi satu warna per level faktor.
  • 📈 Garis Tren: stat_smooth(method = “lm”) menambahkan garis regresi yang sesuai, dan se = FALSE menghilangkan pita kepercayaan.
  • Pembagian: facet_wrap() menggambar satu panel per grup pada skala yang sama, yang lebih baik daripada memadatkan setiap seri ke dalam satu grafik.
  • 🔁 Melebihi plot: Turunkan alpha, goyangkan titik-titik, atau beralih ke geom_hex() ketika penanda saling bertumpuk.
  • 💾 Ekspor: ggsave(“plot.png”, width = 8, height = 5, dpi = 300) menulis plot terakhir ke direktori kerja.

Plot Sebar di R menggunakan ggplot2

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.

Plot Sebar di R

  • 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:

Plot Sebaran Dasar

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:

Sebarkan Plot dengan Grup

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:

Ubah Sumbu

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:

Plot Sebar dengan Nilai yang Dipasang

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

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 Judul dengan Nama Dinamis

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:

Tambahkan Subjudul

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:

Ganti nama sumbu x dan sumbu y

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:

Kendalikan timbangannya

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:

Tema

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:

Simpan Plot

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

Pertanyaan Umum Demo Slot

Fungsi geom_point() menggambar setiap pengamatan pada koordinat tepatnya. Fungsi geom_jitter() menambahkan pergeseran acak kecil sehingga titik-titik yang memiliki nilai yang sama menjadi dapat dibedakan, yang penting ketika salah satu sumbu memuat nilai diskrit.

Di dalam fungsi aes(), warna memetakan sebuah variabel, sehingga ggplot2 menetapkan satu gradasi warna per level dan membuat legenda. Di luar fungsi aes(), warna adalah konstanta tetap yang diterapkan pada setiap titik, dan tidak ada legenda yang muncul.

Tambahkan stat_smooth(method = “lm”) atau geom_smooth(method = “lm”) setelah geom_point(). Atur se = FALSE untuk menyembunyikan confidence band, dan gunakan method = “loess” untuk smoother non-linear.

Diagram sebar mengungkapkan korelasi fitur dan outlier sebelum pelatihan, dan merupakan cara standar untuk menampilkan nilai prediksi dibandingkan nilai aktual atau untuk memvisualisasikan klaster setelah pengurangan dimensi dengan PCA atau t-SNE.

Ya. Asisten AI dapat membuat lapisan, menyarankan perbaikan tumpang tindih, dan menjelaskan kesalahan seperti pembungkus aes() yang hilang. Jalankan kode yang dihasilkan pada data Anda sendiri, karena nama kolom dan tipe faktor mudah salah.

Ringkaslah postingan ini dengan: