Scatter Plot di R menggunakan ggplot2 (dengan Contoh)
Grafik adalah bagian ketiga dari proses analisis data. Bagian pertama adalah tentang ekstraksi data, bagian kedua membahas membersihkan dan memanipulasi data. Pada akhirnya, data scientist mungkin perlu melakukannya mengkomunikasikan hasilnya secara grafis.
Pekerjaan seorang data scientist dapat dilihat pada gambar berikut
- 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.
paket ggplot2
Bagian tutorial ini berfokus pada cara membuat grafik/bagan dengan R.
Dalam tutorial ini, Anda akan menggunakan paket ggplot2. Paket ini dibangun berdasarkan landasan yang konsisten dari buku Tata Bahasa Grafik yang ditulis oleh Wilkinson, 2005. ggplot2 sangat fleksibel, menggabungkan banyak tema dan spesifikasi plot pada abstraksi tingkat tinggi. Dengan ggplot2, Anda tidak dapat membuat plot grafik 3 dimensi dan membuat grafik interaktif.
Dalam ggplot2, grafik tersusun dari argumen berikut:
- data
- pemetaan estetika
- 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()`
petak sebar
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()
Penjelasan Kode
- 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)))
Penjelasan Kode
- Aes() di dalam geom_point() mengontrol warna grup. Kelompok harus menjadi variabel faktor. Dengan demikian, Anda mengubah gigi variabel menjadi faktor.
- Secara keseluruhan, Anda memiliki kode aes(color = factor(gear)) yang mengubah warna titik.
Keluaran:
Ubah sumbu
Menskalakan ulang data adalah bagian besar dari pekerjaan data scientist. Terkadang, data hadir dalam bentuk lonceng yang bagus. Salah satu solusi untuk membuat data Anda kurang sensitif terhadap outlier adalah dengan mengubah skalanya.
ggplot(mtcars, aes(x = log(mpg), y = log(drat))) + geom_point(aes(color = factor(gear)))
Penjelasan Kode
- Anda mengubah variabel x dan y di log() langsung di dalam pemetaan aes().
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 memplot nilai regresi linier yang sesuai.
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
Penjelasan Kode
- grafik: Anda menyimpan grafik Anda ke dalam variabel grafik. Ini berguna untuk penggunaan lebih lanjut atau menghindari baris kode yang terlalu rumit
- Argumen stat_smooth() mengontrol metode penghalusan
- metode = “lm”: Regresi linier
- col = “#C42126” : Kode warna merah pada garis
- se = FALSE: Tidak menampilkan kesalahan standar
- size = 1: ukuran garis adalah 1
Keluaran:
Perhatikan bahwa metode penghalusan lain juga tersedia
- glm
- gam
- loess: nilai default
- pelek
Tambahkan informasi ke grafik
Sejauh ini, kami belum menambahkan informasi dalam grafik. Grafik harus informatif. Pembaca harus melihat cerita di balik analisis data hanya dengan melihat grafik tanpa merujuk dokumentasi tambahan. Oleh karena itu, grafik memerlukan label yang baik. Anda dapat menambahkan label dengan fungsi labs().
Sintaks dasar untuk lab() adalah:
lab(title = "Hello Guru99") argument: - title: Control the title. It is possible to change or add title with: - subtitle: Add subtitle below title - caption: Add caption below the graph - x: rename x-axis - y: rename y-axis Example:lab(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" )
Penjelasan Kode
- 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 lab().
- Kode warna merah pada garis
- se = FALSE: Tidak menampilkan kesalahan standar
- size = 1: ukuran garis adalah 1
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) )
Penjelasan Kode
- 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 dapat membuat grafik Anda lebih eksplisit. Anda berbicara tentang subtitle dan keterangan. Subjudulnya berada tepat di bawah judul. Judulnya dapat menginformasikan siapa yang melakukan penghitungan dan sumber datanya.
my_graph + labs( title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
Penjelasan Kode
- Di dalam lab(), 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
Variabel itu sendiri dalam kumpulan data mungkin tidak selalu eksplisit atau menurut konvensi menggunakan _ ketika ada beberapa kata (misalnya GDP_CAP). Anda tidak ingin nama tersebut muncul dalam grafik Anda. Penting untuk mengubah nama atau menambahkan lebih banyak detail, seperti unit.
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" )
Penjelasan Kode
- Di dalam lab(), 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`
Misalnya, jika Anda ingin membuat rentang dari 0 hingga 12 dengan langkah 3, Anda akan memiliki empat angka, 0 4 8 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" )
Penjelasan Kode
- 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 enam angka dari 2.4 hingga 3.4 dengan langkah 3
- seq(1, 1.6, by = 0.1): Buat tujuh angka dari 1 hingga 1.6 dengan langkah 1
Keluaran:
Tema
Terakhir, R memungkinkan kita menyesuaikan plot dengan tema berbeda. Perpustakaan ggplot2 mencakup delapan tema:
- tema_bw()
- tema_cahaya()
- tema_kelas()
- 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, sekarang saatnya menyimpan dan membagikan grafik Anda. Anda menambahkan ggsave('NAME OF THE FILE) tepat setelah Anda memplot grafik dan itu akan disimpan di hard drive.
Grafik disimpan di direktori kerja. Untuk memeriksa direktori kerja, Anda dapat menjalankan kode ini:
directory <-getwd() directory
Mari buat grafik fantastis Anda, simpan dan periksa lokasinya
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)
Ringkasan
Anda dapat meringkas argumen untuk membuat plot sebar pada tabel di bawah ini:
Tujuan | Kode |
---|---|
Plot pencar dasar |
ggplot(df, aes(x = x1, y = y)) + geom_point() |
Sebarkan plot dengan kelompok warna |
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) + stat_smooth(method = "lm") |
Tambahkan nilai yang sesuai |
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) |
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() |
Simpan |
ggsave("my_fantastic_plot.png") |