Lewati ke konten utama

15 Pertanyaan yang Dimiliki Semua Pengguna R tentang Plot

Ada berbagai jenis plot R, mulai dari tipe grafik dasar hingga tipe grafik yang kompleks. Di sini kita mempelajari cara membuatnya.
· 15 mnt Baca

Jelajahi bersama AI

jelajahi banner pustaka kursus r datacamp

R memungkinkan Anda membuat berbagai jenis plot, mulai dari jenis grafik dasar seperti density plot, dot plot, boxplot, dan scatter plot, hingga jenis grafik yang lebih kompleks secara statistik seperti probability plot.

Selain itu, R memungkinkan Anda beralih dari menghasilkan grafik dasar dengan sedikit kustomisasi menjadi memplot grafik tingkat lanjut dengan kustomisasi penuh dipadukan dengan grafik interaktif. Namun, tidak selalu kita mendapatkan hasil yang kita inginkan untuk plot R kita: Stack Overflow dipenuhi pertanyaan kita tentang plot, dengan banyak pertanyaan yang berulang.

Inilah alasan DataCamp memutuskan untuk mengumpulkan semua pertanyaan yang sering diajukan beserta jawaban dengan penilaian tertinggi dalam sebuah postingan blog.

Untuk berlatih membuat plot di R, coba kursus visualisasi data di R ini.

15 Pertanyaan Plot R

1. Cara Menggambar Plot R Kosong

Buka Bingkai Plot Baru

Anda dapat membuka bingkai plot kosong dan mengaktifkan perangkat grafis di R sebagai berikut:
plot.new()

# Or try out the following command 
# frame()

Catatan bahwa fungsi plot.new() dan frame() mendefinisikan bingkai plot baru tanpa sumbu, label, atau garis tepi. Ini menandakan bahwa plot baru akan dibuat: jendela grafis baru akan terbuka jika Anda belum memiliki satu pun yang terbuka, jika tidak maka jendela yang ada disiapkan untuk menampung plot baru. Anda dapat membaca lebih lanjut tentang fungsi-fungsi ini di sini.

  • x11() juga dapat membuka perangkat jendela baru di R untuk X Window System (versi 11)!
  • quartz() memulai driver perangkat grafis untuk sistem OS X.

Atur Ukuran Jendela Grafis

Anda juga dapat menggunakan fungsi plot.window() untuk mengatur dimensi horizontal dan vertikal dari plot kosong yang baru saja Anda buat:

plot.new()
pWidth = 3
pHeight = 2
plot.window(c(0,pWidth),
            c(0,pHeight))

Gambar Plot Kosong Sebenarnya

Anda dapat menggambar plot kosong dengan fungsi plot(). Selain itu, lengkapi plot kosong dengan sumbu, label sumbu, dan judul dengan fungsi mtext() dan title().

# Draw an empty plot
plot(5, 
     5, 
     type="n", 
     axes=FALSE, 
     ann=FALSE, 
     xlim=c(0, 10), 
     ylim = c(0,10))

# Add text to the x-axis
mtext("x-axis", 
      side=1)

# Add text to the y-axis
mtext("y-axis",
      side=2) 

# Add a title
title("An R Plot")

Anda memberi koordinat (5,5) untuk plot, tetapi Anda tidak menampilkan pemetaan apa pun dengan mengatur argumen type ke "n".

Tip: coba ubah argumen ini menjadi "p" atau "b" dan lihat apa yang terjadi!

Selain itu, Anda tidak memberi anotasi pada plot, tetapi Anda menetapkan batas dari 0 hingga 10 pada sumbu x dan y.

Terakhir, Anda dapat memilih untuk menggambar kotak di sekitar plot dengan fungsi box() dan menambahkan beberapa titik dengan fungsi points():

# Draw an empty plot
plot(5, 
     5, 
     type="n", 
     axes=FALSE, 
     ann=FALSE, 
     xlim=c(0, 10), 
     ylim = c(0,10))

# Add text to the x-axis
mtext("x-axis", 
      side=1)

# Add text to the y-axis
mtext("y-axis",
      side=2) 

# Add a title
title("An R Plot")

#Draw a box
box()

#Put (red) point in the plot at (5,5)
points(5,
       5, 
       col="red") 
points(5, 
       7, 
       col="orange", 
       pch=3, 
       cex=2)
points(c(0, 0, 1), 
       c(2, 4, 6), 
       col="green", 
       pch=4)

Catatan bahwa Anda dapat menempatkan koordinat x dan koordinat y dalam vektor untuk memplot beberapa titik sekaligus. Argumen pch memungkinkan Anda memilih simbol, sedangkan argumen cex diberi nilai yang menunjukkan seberapa besar teks dan simbol yang diplot harus diskalakan terhadap nilai default.

Tip: jika Anda ingin melihat nomor mana yang terhubung ke simbol apa, klik di sini.

2. Cara Mengatur Label Sumbu dan Judul Plot R

Sumbu pada plot R menjadi salah satu topik paling populer dari pertanyaan di Stack Overflow; Pertanyaan terkait topik ini sangat beragam.

Teruslah membaca untuk mengetahui jenis pertanyaan apa yang DataCamp temukan cukup umum!

Memberi Nama Sumbu (Dengan Superskrip atau Subskrip) dan Menambahkan Judul pada Plot R?

Anda dapat dengan mudah menamai sumbu dan menambahkan judul agar plot R Anda lebih spesifik dan mudah dipahami audiens Anda.

Ini dapat dilakukan dengan menambahkan argumen main untuk judul utama, sub untuk subjudul, xlab untuk label sumbu x, dan ylab untuk label sumbu y.

Catatan bahwa jika Anda ingin judul dengan superskrip atau subskrip, Anda dapat dengan mudah menambahkannya di argumen main dari fungsi plot(). Pastikan menggunakan expression() dan gunakan simbol ^ untuk superskrip atau tanda kurung siku untuk subskrip.

Cobalah pada potongan DataCamp Light di bawah ini:

# The data
x <- seq(0,2*pi,0.1)
y <- sin(x)

# Plot the data
plot(x,
     y,
     main=expression("main title"^2), 
     sub=expression("sub-title"[2]), 
     xlab="x-axis label", 
     ylab="y-axis label")

Anda juga dapat memastikan ada huruf Yunani pada label sumbu dengan menggunakan kode yang menggabungkan fungsi expression() dan paste(). Jalankan potongan kode berikut:

# The data
x <- seq(0,2*pi,0.1)
y <- sin(x)

# Plot the data
plot(x,
     y,
     xlab = expression(paste("Greek letter ", phi)),
     ylab = expression(paste("Greek letter ",mu)))

Sesuaikan Tampilan Label Sumbu

Untuk menyesuaikan tampilan label sumbu x dan y, Anda dapat menggunakan argumen col.lab dan cex.lab. Argumen pertama digunakan untuk mengubah warna label sumbu x dan y, sedangkan argumen kedua digunakan untuk menentukan ukuran label sumbu x dan y relatif terhadap pengaturan (default) cex.
# The data
x <- seq(0,2*pi,0.1)
y <- sin(x)

# Plot the data
plot(x,
     y,
     main=expression("main title"^2), 
     sub=expression("sub-title"[2]), 
     xlab="x-axis label", 
     ylab="y-axis label",
     col.lab="blue",
     cex.lab=0.75)

Untuk informasi lebih lanjut tentang argumen-argumen ini, buka halaman ini.

Hapus Label Sumbu dan Anotasi Plot

Jika Anda ingin menghilangkan nilai sumbu dari plot, Anda dapat terlebih dahulu menambahkan argumen xaxt dan yaxt, diatur sebagai "n". Argumen-argumen ini diisi dengan karakter yang menentukan jenis sumbu x. Jika Anda memasukkan "n", seperti pada perintah di bawah, Anda dapat menekan pemetaan sumbu.

Perhatikan bahwa dengan memberi karakter lain apa pun pada argumen xaxt dan yaxt, sumbu x dan y akan diplot.

Selanjutnya, Anda dapat menambahkan argumen anotasi ann dan mengaturnya ke FALSE untuk memastikan label sumbu mana pun dihapus.
# The data
x <- seq(0,2*pi,0.1)
y <- sin(x)

# Plot the data
plot(x,
     y,
     xaxt="n",
     yaxt="n",
     ann=FALSE)

Tip: bukan informasi yang Anda cari? Kunjungi halaman ini.

Putar Label Sumbu Plot

Anda dapat menambahkan argumen las ke fungsi axis() untuk memutar angka yang sesuai untuk setiap sumbu:
# The data
x <- seq(0,2*pi,0.1)
y <- sin(x)

# Plot the data, no axes
plot(x,
     y, 
     axes=FALSE)

# Draw a box
box()

# Add (modified) axes to the plot
axis(2, 
     las=2)
axis(1, 
     las=0)

Catatan bagaimana ini sebenarnya mengharuskan Anda menambahkan argumen ke fungsi plot() yang pada dasarnya menyatakan bahwa belum ada sumbu yang akan diplot: ini adalah tugas dari dua fungsi axis() yang menyusul.

Argumen las dapat memiliki tiga nilai yang dikaitkan dengannya. Bergantung pada opsi yang Anda pilih, penempatan label akan berbeda: jika Anda memilih 0, label akan selalu sejajar dengan sumbu (ini adalah default); Jika Anda memilih 1, label akan diletakkan secara horizontal. Pilih 2 jika Anda ingin label tegak lurus terhadap sumbu dan 3 jika Anda ingin label ditempatkan secara vertikal.

Masih ada lagi. Jika Anda ingin mengetahui lebih banyak tentang kemungkinan fungsi axis(), teruslah membaca!

Pindahkan Label Sumbu Plot R Anda

Jadi, Anda ingin memindahkan label sumbu Anda?

Tenang, Anda dapat melakukannya dengan fungsi axis(); Seperti yang mungkin telah Anda perhatikan sebelumnya dalam tutorial ini, fungsi ini memungkinkan Anda terlebih dahulu menentukan di mana Anda ingin menggambar sumbu. Misalnya, Anda ingin menggambar sumbu x di atas area plot dan sumbu y di sisi kanannya.

Ingat bahwa jika Anda memberikan 1 atau 2 ke fungsi axis(), sumbu Anda akan digambar di bawah dan di kiri area plot. Gulir sedikit ke atas untuk melihat contohnya pada potongan kode sebelumnya!

Ini berarti Anda akan memberikan 3 dan 4 ke fungsi axis():
# The data
x<-seq(0,2*pi,0.1)
y<-sin(x)

# Plot the data, but don't plot axes or annotations
plot(x,
     y,
     axes=FALSE, 
     ann=FALSE)

# Draw the x-axis above the plot area
axis(3)

# Draw the y-axis to the right of the plot area
axis(4)

# Draw a box
box()

Seperti yang Anda lihat, pertama-tama, Anda memplot x dan y, tetapi Anda tidak menampilkan sumbu dan anotasi. Lalu, Anda menambahkan sumbu yang ingin Anda lihat dan menentukan lokasinya terhadap plot.

Fleksibilitas yang diciptakan fungsi axis() untuk Anda terus berkembang! Lihat pertanyaan yang sering diajukan berikutnya untuk melihat apa lagi yang dapat Anda selesaikan dengan fungsi R dasar ini.

Tip: buka pertanyaan terakhir untuk melihat lebih lanjut cara memindahkan teks di label sumbu dengan hjust dan vjust!

3. Cara Menambahkan dan Mengubah Jarak Tanda Centang pada Plot R Anda

Cara Mengubah Jarak Tanda Centang pada Plot R Anda

Membiarkan R menentukan tanda centang pada plot dapat cukup menjengkelkan dan mungkin ada saatnya Anda ingin menyesuaikannya.

1. Menggunakan Fungsi axis() untuk Menentukan Tanda Centang pada Plot Anda

Pertimbangkan potongan kode berikut:
# Define the position of tick marks
v1 <- c(0,pi/2,pi,3*pi/2,2*pi)

# Define the labels of tick marks
v2 <- c("0","Pi/2","Pi","3*Pi/2","2*Pi")

# The data
x <- seq(0,2*pi,0.1)
y <- sin(x)

# Plot the data
plot(x,
     y,
     xaxt = "n")

# Add an axis to the plot 
axis(side = 1, 
     at = v1, 
     labels = v2,
     tck=-.05)

Seperti yang Anda lihat, pertama-tama Anda menentukan posisi tanda centang dan labelnya. Lalu, Anda menggambar plot, menentukan jenis sumbu x sebagai "n", menekan pemetaan sumbu.

Kemudian, pekerjaan sebenarnya dimulai:

  • Fungsi axis() memungkinkan Anda menentukan sisi plot tempat sumbu akan digambar. Dalam kasus ini, argumen diisi dengan 1, yang berarti sumbu digambar di bawah. Jika nilainya 2, sumbu akan digambar di kiri dan jika nilainya 3 atau 4, sumbu masing-masing akan digambar di atas atau di kanan;
  • Argumen at memungkinkan Anda menunjukkan titik-titik tempat tanda centang akan digambar. Dalam kasus ini, Anda menggunakan posisi yang didefinisikan dalam V1;
  • Demikian pula, labels yang ingin Anda gunakan adalah yang ditentukan dalam V2;
  • Anda menyesuaikan arah centang melalui tck: dengan memberi argumen ini nilai negatif, Anda menentukan bahwa centang harus muncul di bawah sumbu.

Tip: coba berikan nilai positif pada argumen tck dan lihat apa yang terjadi!

Anda dapat lebih lanjut menentukan ukuran centang melalui tcl dan tampilan label centang dikontrol dengan cex.axis, col.axis, dan font.axis.
# Define the position of tick marks
v1 <- c(0,pi/2,pi,3*pi/2,2*pi)

# Define the labels of tick marks
v2 <- c("0","Pi/2","Pi","3*Pi/2","2*Pi")

# The data
x <- seq(0,2*pi,0.1)
y <- sin(x)

# Plot the data
plot(x,
     y,
     xaxt = "n")

# Add axis to the plot 
axis(side = 1, 
     at = v1, 
     labels = v2,
     tck=-.1,
     tcl = -0.5,
     cex.axis=1.05,
     col.axis="blue",
     font.axis=5)

2. Menggunakan Fungsi Lain untuk Menentukan Tanda Centang pada Plot R Anda

Anda juga dapat menggunakan fungsi par() dan plot() untuk mendefinisikan posisi tanda centang dan jumlah interval di antaranya.

Catatan bahwa kemudian Anda menggunakan argumen xaxp yang Anda isi dengan posisi tanda centang yang terletak pada ujung sumbu x, diikuti jumlah interval antara tanda centang:
# The data
x <- seq(0,2*pi,0.1)
y <- sin(x)

# Plot the data
plot(x,
     y,
     xaxp = c(0, 2*pi, 5))

Anda juga dapat menjalankan kode berikut untuk pada dasarnya mendapatkan hasil yang sama:

# The data 
x <- seq(0,2*pi,0.1)
y <- sin(x)

# Plot the data 
plot(x, 
     y, 
     xaxt="n")

# Use `par()` to set graphical `xaxp` parameter
par(xaxp= c(0, 2*pi, 2)) 

# Add an axis to the plot 
axis(1)

Catatan bahwa ini hanya berfungsi jika Anda tidak menggunakan skala logaritmik. Jika koordinat log diatur true, atau dengan kata lain, jika par(xlog=T), tiga nilai yang Anda berikan ke xaxp memiliki arti berbeda: untuk rentang kecil, n bernilai negatif. Jika tidak, n berada pada 1:3, menentukan nomor kasus, dan x1 serta x2 adalah pangkat terendah dan tertinggi dari 10 di dalam koordinat pengguna, 10 ^ par(“usr”)[1:2].

Contoh:
n <- 1

# The data
x <- seq(0, 10000, 1)
y <- exp(n)/(exp(n)+x)

# Set graphical parameters `xlog` and `xaxp`
par(xlog=TRUE, 
    xaxp= c(1, 4, 3))

# Pot the data 
plot(x, 
     y, 
     log="x") 

Pada contoh ini, Anda menggunakan fungsi par(): Anda mengatur xlog ke TRUE dan menambahkan argumen xaxp untuk memberi koordinat tanda centang ekstrem dan jumlah interval di antaranya. Dalam kasus ini, Anda menetapkan nilai minimum 1, nilai maksimum 4 dan menambahkan bahwa jumlah interval antara setiap tanda centang harus 3.

Kemudian, Anda memplot x dan y, menambahkan argumen log untuk menentukan apakah akan memplot sumbu x atau y atau keduanya pada skala log. Anda dapat memberikan nilai "x", "y", dan "xy" ke argumen log untuk melakukan ini.

Contoh dengan kedua sumbu dalam skala logaritmik adalah:
n <- 1

# The data
x <- seq(0, 20, 1)
y <- exp(x)/(x)

# Set graphical parameters `xlog` and `xaxp`
par(xlog=TRUE, 
    xaxp= c(1, 4, 3))
# Set graphical parameters `ylog` and `yaxp`
par(ylog=TRUE, 
    yaxp= c(1, 11, 2)) 

# Plot the data 
plot(x, 
     y, 
     log="xy")

Cara Menambahkan Tanda Centang Minor pada Plot R

Anda dapat dengan cepat menambahkan tanda centang minor ke plot Anda dengan fungsi minor.tick() dari paket Hmisc:
# Import `Hmisc` library
library(Hmisc)

# Make a new plot
plot.new()

# Set minor tick mark
minor.tick(nx = 1.5, 
           ny = 2, 
           tick.ratio=0.75)
  • Argumen nx memungkinkan Anda menentukan jumlah interval yang ingin Anda bagi di area antara tanda centang mayor pada sumbu. Jika Anda memberikan nilai 1, tanda centang minor akan dihilangkan;
  • ny memungkinkan Anda melakukan hal yang sama seperti nx, tetapi untuk sumbu y;
  • tick.ratio menunjukkan rasio panjang tanda centang minor terhadap tanda centang mayor. Panjang yang terakhir diambil dari par(tck=x).

4. Cara Membuat Dua Sumbu X atau Y yang Berbeda

Opsi pertama adalah membuat plot pertama dan menjalankan fungsi par() dengan argumen new diatur ke TRUE untuk mencegah R membersihkan perangkat grafis:
# Set a seed 
set.seed(101)

# The data
x <- 1:10
y <- rnorm(10)
z <- runif(10, min=1000, max=10000)

# Plot the data
plot(x, y) 

# Don't clean the frame before drawing
par(new = TRUE)

Kemudian, Anda membuat plot kedua dengan plot(). Masukkan datanya, dan pastikan Anda menyesuaikan beberapa argumen, seperti type, axes, bty, xlab, dan ylab:

  • type: Anda dapat memasukkan l untuk memastikan Anda memplot dengan garis;
  • axes diatur ke FALSE sehingga tidak ada sumbu yang diplot;
  • bty menekan penggambaran kotak di sekitar plot;
  • xlab diatur ke string kosong, yang membuat tidak ada label pada sumbu x, dan
  • ylab juga diatur ke string kosong, sehingga sumbu y juga tidak memiliki label.

Lihat semuanya pada potongan DataCamp Light berikut. Perhatikan bahwa kode dari atas telah dimuat ke dalam lingkungan kerja Anda. Anda dapat memeriksanya dengan menggunakan R Console di sisi kanan kotak DataCamp Light:

plot(x, 
     z, 
     type = "l", 
     axes = FALSE,
     bty = "n", 
     xlab = "", 
     ylab = "")

Berikutnya, saatnya menambahkan sumbu dan menulis teks ke margin plot masing-masing dengan axis() dan mtext().

Anda dapat menambahkan sumbu baru di sisi kanan dengan menambahkan argumen side dan memberinya nilai 4 ke fungsi axis(). Selanjutnya, Anda menentukan argumen at untuk menunjukkan titik tempat tanda centang perlu digambar. Dalam kasus ini, Anda menghitung deret n+1 nilai “bulat” dengan jarak sama yang mencakup rentang nilai dalam z dengan fungsi pretty(). Ini memastikan bahwa Anda benar-benar memiliki angka dari sumbu y dari plot kedua Anda, yang Anda beri nama z.

Coba semua ini di bawah:

axis(side=4, 
     at = pretty(range(z)))
mtext("z", 
      side=4, 
      line=3)

Catatan bahwa argumen side dapat memiliki tiga nilai: 1 untuk menempatkan teks di bawah, 2 untuk penempatan di kiri, 3 untuk penempatan di atas, dan 4 untuk menempatkan teks di kanan. Argumen line menunjukkan pada garis margin mana teks dimulai.

Hasil akhir dari kode Anda akan terlihat seperti ini:

set.seed(101)
x <- 1:10
y <- rnorm(10)
z <- runif(10, min=1000, max=10000)
plot(x, y) 
par(new = TRUE)
plot(x, 
     z, 
     type = "l", 
     axes = FALSE, 
     bty = "n", 
     xlab = "", 
     ylab = "")
axis(side=4, 
     at = pretty(range(z)))
mtext("z", 
      side=4, 
      line=3)

Sebagai latihan tambahan, coba buat plot R dengan dua sumbu x yang berbeda! Lakukan ini di potongan DataCamp Light di bawah:

plot.new()
set.seed(101)
x <- 1:10
y <- rnorm(10)
z <- runif(10, min=1000, max=10000) 
par(mar = c(5, 4, 4, 4) + 0.3)
plot(x, y)
par(new = TRUE)
plot(z, y, type = "l", axes = FALSE, bty = "n", xlab = "", ylab = "")
axis(side=3, at = pretty(range(z)))
mtext("z", side=3, line=3)

Perhatikan bahwa, meskipun Anda dapat melakukan semua ini secara manual dengan fungsi dasar plot(), axis(), dan mtext(), ada paket yang mengotomatiskan semuanya: fungsi twoord.plot() dari paket plotrix dan fungsi doubleYScale() dari paket latticeExtra cukup praktis dan mungkin lebih cepat jika Anda ingin melakukan hal yang sama:

# Import `latticeExtra`
library(latticeExtra)

# The data
chol <- read.table(url("http://assets.datacamp.com/blog_assets/chol.txt"), header = TRUE)
Age <- chol$AGE
Chol <- chol$CHOL
Smoke <- chol$SMOKE
State <- chol$MORT

# Create a bivariate scatterplot `a` 
a <- xyplot(Chol ~ Age|State)

# Create a bivariate scatterplot `b` 
b <- xyplot(Smoke ~ Age|State)

# Draw the two plots with different y scales 
doubleYScale(a, b, style1 = 0, style2 = 3, add.ylab2 = TRUE, columns=3)

Catatan bahwa contoh di atas dibuat dengan dataset ini. Jika Anda ragu tentang proses impor data atau fungsi read.table(), lihat tutorial DataCamp tentang mengimpor data di R.

5. Cara Menambahkan atau Mengubah Legenda Plot R

Menambahkan dan Mengubah Legenda Plot R dengan R Dasar

Anda dapat dengan mudah menambahkan legenda ke plot R Anda dengan fungsi legend():
# The data
x <- seq(0,pi,0.1)
y1 <- cos(x)
y2 <- sin(x)

# Plot 
plot(c(0,3), c(0,3), type="n", xlab="x", ylab="y")

# Draw lines
lines(x, y1, col="red", lwd=2)
lines(x, y2, col="blue", lwd=2)

# Add legend to plot 
legend("topright", 
       inset=.05, 
       cex = 1, 
       title="Legend", 
       c("Cosinus","Sinus"), 
       horiz=TRUE, 
       lty=c(1,1), 
       lwd=c(2,2), 
       col=c("red","blue"), 
       bg="grey96")

Perhatikan bahwa argumen pt.cex dan title.cex yang dijelaskan dalam dokumentasi legend() tidak benar-benar berfungsi. Ada beberapa solusi:

  1. Tempatkan judul atau label legenda dalam font berbeda dengan menambahkan argumen text.font ke legend():
# The data
x <- seq(0,pi,0.1)
y1 <- cos(x)
y2 <- sin(x)

# Plot 
plot(c(0,3), c(0,3), type="n", xlab="x", ylab="y")

# Draw lines
lines(x, y1, col="red", lwd=2)
lines(x, y2, col="blue", lwd=2)

# Add legend
legend("topright", 
       inset=.05, 
       cex = 1, 
       title="Legend", 
       c("Cosinus","Sinus"), 
       horiz=TRUE, 
       lty=c(1,1), 
       lwd=c(2,2), 
       col=c("red","blue"), 
       bg="grey96",
       text.font=3)
  1. Gambar legenda dua kali dengan nilai argumen cex yang berbeda
# The data
x <- seq(0,pi,0.1)
y1 <- cos(x)
y2 <- sin(x)

# Plot
plot(c(0,3), c(0,3), type="n", xlab="x", ylab="y")

# Draw lines
lines(x, y1, col="red", lwd=2)
lines(x, y2, col="blue", lwd=2)

# Add subtitles for legend
legend("topright",
       inset=.05,
       cex = 0.75,
       c("Cosinus","Sinus"),
       title="",
       horiz=TRUE,
       lty=c(1,1), 
       lwd=c(2,2), 
       col=c("red","blue"))

# Add title to legend 
legend(2.05, 2.97, 
       inset=.05,
       c("",""),
       title="Legend",
       cex=1.15, 
       bty="n")

Tip: jika Anda tertarik mengetahui lebih lanjut tentang warna yang dapat Anda gunakan di R, lihat dokumen PDF yang sangat membantu ini.

Cara Menambahkan dan Mengubah Legenda dan Label Plot R di ggplot2

Menambahkan legenda ke plot ggplot2 Anda cukup mudah. Anda cukup menjalankan hal berikut:
# Load in `ggplot2`
library(ggplot2)

# Read in the data
chol <- read.table(url("http://assets.datacamp.com/blog_assets/chol.txt"), 
                   header = TRUE)

# Plot the data 
ggplot(chol, aes(x=chol$WEIGHT, 
                 y=chol$HEIGHT)) + 
  geom_point(aes(colour = factor(chol$MORT), 
                 shape=chol$SMOKE)) + 
  xlab("Weight") + 
  ylab("Height") 

Dan Anda mendapatkan legenda default. Namun, dalam banyak kasus, Anda akan ingin menyesuaikan tampilan legenda lebih lanjut.

Ada dua cara mengubah judul dan label legenda di ggplot2:

  1. Menginformasikan skala agar menggunakan judul dan label yang berbeda
Jika Anda telah menentukan argumen seperti colour atau shape, atau estetika lainnya, Anda perlu mengubah nama dan label melalui fungsi scale_color_discrete() dan scale_shape_discrete() masing-masing:
# Load in `ggplot2`
library(ggplot2)

# Read in data
chol <- read.table(url("http://assets.datacamp.com/blog_assets/chol.txt"), 
                   header = TRUE)

# Plot the data
ggplot(chol, aes(x=chol$WEIGHT, 
                 y=chol$HEIGHT)) + 
  geom_point(aes(colour = factor(chol$MORT), 
                 shape = chol$SMOKE)) + 
  xlab("Weight") + 
  ylab("Height") + 
  theme(legend.position=c(1,0.5),
        legend.justification=c(1,1)) + 
  scale_color_discrete(name ="Condition", 
                       labels=c("Alive", "Dead")) +
  scale_shape_discrete(name="Smoker", 
                       labels=c("Non-smoker", "Sigare", "Pipe" ))

Perhatikan bahwa plot terlihat agak tertekan di tab Plot pada potongan DataCamp Light, tetapi ini tidak akan menjadi masalah jika Anda menjalankan kode di RStudio.

Perhatikan bahwa Anda dapat membuat dua legenda jika Anda menambahkan argumen shape ke dalam fungsi geom_point() dan ke dalam argumen labels!

Jika Anda ingin memindahkan legenda ke bagian bawah plot, Anda dapat menentukan legend.position sebagai "bottom". Argumen legend.justification, di sisi lain, memungkinkan Anda memosisikan legenda di dalam plot.

Tip: lihat berbagai skala yang dapat digunakan untuk memberi tahu ggplot bahwa nama dan label lain harus digunakan di sini.

  1. Ubah data frame sehingga faktor memiliki bentuk yang diinginkan
Contoh:
# Read in data
chol <- read.table(url("http://assets.datacamp.com/blog_assets/chol.txt"), header = TRUE)

# Manipulate the data
levels(chol$SMOKE)[levels(chol$SMOKE)=="Non-smoker"] <- "Non-smoker"
levels(chol$SMOKE)[levels(chol$SMOKE)=="Sigare"] <- "Sigare"
levels(chol$SMOKE)[levels(chol$SMOKE)=="Pipe"] <- "Pipe"
names(chol)[names(chol)=="SMOKE"]  <- "SMOKER"

# Inspect result 
head(chol)

Kemudian Anda dapat menggunakan nama faktor baru untuk membuat plot di ggplot2, menghindari “kerumitan” mengubah nama dan label dengan baris kode tambahan saat plotting.

Tip: untuk cheat sheet lengkap ggplot2, Anda bisa pergi ke sini.

6. Cara Menggambar Kisi pada Plot R Anda

Menggambar Kisi pada Plot R Anda dengan R Dasar

Untuk beberapa tujuan, Anda mungkin merasa perlu menyertakan kisi pada plot. Anda dapat dengan mudah menambahkan kisi ke plot dengan menggunakan fungsi grid():
# Data
x <- c(1,2,3,4,5)
y <- 2*x

# Plot
plot(x,y)

# Grid
grid(10,10)

Menggambar Kisi pada Plot R dengan ggplot2

Potongan kode di bawah menunjukkan cara memastikan plot Anda memiliki kisi dengan paket ggplot2. Perhatikan bahwa data chol telah dimuat dan langkah manipulasi data dari atas telah diterapkan.

Jika Anda tidak yakin seperti apa data tersebut, cetak baris pertama data frame di R Console pada potongan DataCamp Light:

# Load in `ggplot2`
library(ggplot2)

# Plot data 
ggplot(chol, aes(x=chol$WEIGHT, y=chol$HEIGHT)) + 
  geom_point(aes(colour = factor(chol$MORT), shape = chol$SMOKE)) + 
  xlab("Weight") + 
  ylab("Height") + 
  theme(panel.grid.major = element_line(colour = "grey40"),
        panel.grid.minor = element_line(colour = "grey40"))

Tip: jika Anda tidak ingin memiliki garis kisi minor, cukup berikan element_blank() ke panel.grid.minor.

Jika Anda ingin mengisi latar belakang dengan warna, tambahkan panel.background = element_rect(fill = "navy") ke kode Anda. Anda dapat melihat cara melakukannya pada blok DataCamp Light di bawah. Data chol telah dimuat dan dimanipulasi ringan, seperti sebelumnya. Coba sendiri!

library(ggplot2)
ggplot(chol, aes(x=chol$WEIGHT, y=chol$HEIGHT)) + 
  geom_point(aes(colour = factor(chol$MORT), shape = chol$SMOKER)) + 
  xlab("Weight") + 
  ylab("Height") + 
  scale_color_discrete(name ="Condition", labels=c("Alive", "Dead")) +
  scale_shape_discrete(name="Smoker", labels=c("Non-smoker", "Sigare", "Pipe" )) +
  theme(legend.position=c(1,0.5),
        legend.justification=c(1,1),
        panel.grid.major = element_line(colour = "grey40"),
        panel.grid.minor = element_line(colour = "grey40"),
        panel.background = element_rect(fill = "navy")
        )

7. Cara Menggambar Plot dengan PNG sebagai Latar Belakang

Anda dapat dengan cepat menggambar plot dengan .png sebagai latar belakang dengan bantuan paket png. Instal paket jika diperlukan, aktifkan untuk digunakan di ruang kerja melalui fungsi pustaka library() dan Anda dapat mulai memplot!

Pertama, Anda ingin memuat gambar. Gunakan fungsi readPNG() untuk menentukan path ke gambar!

tip: Anda dapat memeriksa di mana direktori kerja Anda diatur dan mengubahnya dengan menjalankan perintah berikut.

Jika gambar Anda disimpan di direktori kerja, Anda dapat cukup menuliskan readPNG("picture.png") alih-alih memasukkan seluruh path.

Selanjutnya, Anda ingin mengatur area plot dan memanggil fungsi par() untuk mengatur parameter grafis di rasterImage(). Anda menggunakan argumen usr untuk mendefinisikan batas koordinat pengguna pada wilayah plotting. Dalam hal ini, Anda menggunakan 1, 3, 2, dan 4.

Berikutnya, Anda menggambar kisi dan menambahkan beberapa garis:

install.packages("png")
library(png)
image <- readPNG("<path to your picture>")

getwd()
setwd("<path to a folder>")

plot(1:2, type='n', main="Plotting Over an Image", xlab="x", ylab="y")

lim <- par()

rasterImage(image, lim$usr[1], lim$usr[3], lim$usr[2], lim$usr[4])

grid()
lines(c(1, 1.2, 1.4, 1.6, 1.8, 2.0), c(1, 1.3, 1.7, 1.6, 1.7, 1.0), type="b", lwd=5, col="red")

Ini dapat memberi Anda hasil berikut jika Anda menggunakan logo DataCamp:

library(png)
image <- readPNG("datacamp.png")
plot(1:2, type="n", main="Plotting Over an Image", xlab="x", ylab="y", asp=1)
lim <- par()
rasterImage(image, lim$usr[1], lim$usr[3], lim$usr[2], lim$usr[4])
lines(c(1, 1.2, 1.4, 1.6, 1.8, 2.0), c(1.5, 1.3, 1.7, 1.6, 1.7, 1.0), type="b", lwd=5, col="red")

Memplot di atas logo DataCamp

Perhatikan bahwa Anda perlu memberikan file .png sebagai input ke readPNG() dan bahwa, jika Anda mau, Anda juga dapat mengikuti prosedur yang sama untuk bekerja dengan gambar jpg. Tentu saja, Anda perlu memuat pustaka jpeg!

# Download an image
download.file("https://holtzyan.files.wordpress.com/2015/10/cropped-p1090518.jpg" , destfile="my_image.jpg")

# Load `jpeg` 
library(jpeg)

# Read in the jpg file 
my_image=readJPEG("my_image.jpg")

# Set up a plot area with no plot
plot(1:2, type='n', main="", xlab="x", ylab="y")

# Get the plot information
lim <- par()
rasterImage(my_image, lim$usr[1], lim$usr[3], lim$usr[2], lim$usr[4])
grid()

#Add your plot
lines(c(1, 1.2, 1.4, 1.6, 1.8, 2.0), c(1, 1.3, 1.7, 1.6, 1.7, 1.0), type="b", lwd=5, col="white")

Perhatikan bahwa dalam contoh ini, Anda terlebih dahulu mengunduh gambar dari web untuk digunakan dalam plot, tetapi Anda juga dapat cukup menyimpan gambar dan memberikan path file ke readJPEG() untuk menggunakannya saat plotting.

Perlu dicatat juga bahwa contoh ini diambil dari R Graph Gallery, yang menawarkan banyak inspirasi untuk visualisasi data R, karena Anda dapat menemukan kode dan hasilnya dalam satu tempat! Ini ideal jika Anda mencari inspirasi atau cara cepat menemukan kode yang Anda butuhkan untuk grafik Anda!

8. Cara Menyesuaikan Ukuran Titik pada Plot R

Menyesuaikan Ukuran Titik pada Plot R dengan R Dasar

Untuk menyesuaikan ukuran titik dengan R dasar, Anda bisa cukup menggunakan argumen cex:
x <- c(1,2,3,4,5)
y <- c(6,7,8,9,10)

plot(x,y,cex=2,col="red")
Ingat, namun, bahwa R memungkinkan Anda memiliki kontrol lebih terhadap simbol melalui fungsi symbols():
df <- data.frame(x1=1:10, 
                 x2=sample(10:99, 10), 
                 x3=10:1)
symbols(x=df$x1, 
        y=df$x2, 
        circles=df$x3, 
        inches=1/3, 
        ann=F, 
        bg="steelblue2", 
        fg=NULL)

Lingkaran pada plot ini menerima nilai df$x3 sebagai jari-jari, sementara argumen inches mengontrol ukuran simbol. Ketika argumen ini menerima angka positif sebagai input, simbol diskalakan sehingga dimensi terbesarnya sebesar ukuran ini dalam inci.

Menyesuaikan Ukuran Titik pada Plot R Anda dengan ggplot2

Dalam kasus ini, Anda akan ingin menyesuaikan ukuran titik pada scatterplot. Anda dapat melakukannya dengan argumen size. Perhatikan bahwa data chol telah dimuat untuk Anda:
library(ggplot2)

ggplot(chol, 
       aes(x=chol$WEIGHT, y=chol$HEIGHT), 
       size = 2) + 
  geom_point()

Perhatikan bahwa Anda juga dapat memberikan argumen size ke fungsi geom_point():

ggplot(chol, 
       aes(x=chol$WEIGHT, y=chol$HEIGHT)) + 
  geom_point(size = 2)

Anda akan mendapatkan hasil yang sama, tetapi jangan percaya begitu saja! Coba ganti potongan kode terakhir di DataCamp Light dengan potongan ini.

9. Cara Memasang Kurva Halus pada Data R Anda

Fungsi loess() mungkin merupakan solusi favorit setiap pemrogram R untuk jenis pertanyaan ini. Fungsi ini sebenarnya “memasang permukaan polinomial yang ditentukan oleh satu atau lebih prediktor numerik, menggunakan fitting lokal”.

Singkatnya, Anda memiliki data dan menggunakan fungsi loess(), di mana Anda mengorelasikan y dan x. Melalui ini, Anda menentukan respons numerik dan satu hingga empat prediktor numerik.

Selanjutnya, Anda memplot x dan y dan Anda memplot garis pada plot asli tempat Anda memprediksi nilai lo:
x <- 1:10
y <- c(2,4,6,8,7,12,14,16,18,20)

#Estimations between data
lo <- loess(y~x)

plot(x,y)

lines(predict(lo))

10. Cara menambahkan Error Bar pada Plot R

Menggambar Error Bar dengan R Dasar

Berita buruk: R tidak bisa langsung menggambar error bar begitu saja. Berita baik: Anda tetap bisa menggambar error bar tanpa perlu memasang paket tambahan!

Pertama, Anda perlu mendefinisikan fungsi berikut untuk menghitung beberapa statistik ringkas dari data frame Anda:

summarySE <- function(data=NULL, measurevar, groupvars=NULL, na.rm=FALSE,
                      conf.interval=.95, .drop=TRUE) {
    library(plyr)

    # New version of length which can handle NA's: if na.rm==T, don't count them
    length2 <- function (x, na.rm=FALSE) {
        if (na.rm) sum(!is.na(x))
        else       length(x)
    }

    # This does the summary. For each group's data frame, return a vector with
    # N, mean, and sd
    datac <- ddply(data, groupvars, .drop=.drop,
      .fun = function(xx, col) {
        c(N    = length2(xx[[col]], na.rm=na.rm),
          mean = mean   (xx[[col]], na.rm=na.rm),
          sd   = sd     (xx[[col]], na.rm=na.rm)
        )
      },
      measurevar
    )

    # Rename the "mean" column    
    datac <- rename(datac, c("mean" = measurevar))

    datac$se <- datac$sd / sqrt(datac$N)  # Calculate standard error of the mean

    # Confidence interval multiplier for standard error
    # Calculate t-statistic for confidence interval: 
    # e.g., if conf.interval is .95, use .975 (above/below), and use df=N-1
    ciMult <- qt(conf.interval/2 + .5, datac$N-1)
    datac$ci <- datac$se * ciMult

    return(datac)
}

Perhatikan bahwa definisi fungsi ini berasal dari sumber ini dan juga tersedia melalui pustaka Rmisc.

Selanjutnya, Anda bisa menggunakannya untuk menghitung beberapa statistik dari data chol, yang sudah dimuat untuk Anda. Setelah itu, Anda bisa menggunakan angka-angka hasilnya untuk membuat plot.

Pastikan untuk memeriksa datanya sebelum memulai latihan ini!

#Calculate some statistics for the `chol` dataset
cholc <- summarySE(chol, 
                   measurevar="CHOL", 
                   groupvars=c("MORT",
                               "SMOKER"))
#Plot the data
plot(cholc$N, 
     cholc$CHOL,
     ylim=range(c(cholc$CHOL-cholc$sd, 
                  cholc$CHOL+cholc$sd)),
     pch=19, 
     xlab="Cholesterol Measurements", 
     ylab="Cholesterol Mean +/- SD",
     main="Scatterplot With sd Error Bars"
)

#Draw arrows of a "special" type
arrows(cholc$N, 
       cholc$CHOL-cholc$sd, 
       cholc$N, 
       cholc$CHOL+cholc$sd, 
       length=0.05, 
       angle=90, 
       code=3)

Jika Anda ingin membaca semua argumen yang bisa diterima arrows(), silakan lihat di sini.

Menggambar Error Bar Dengan ggplot2

Error Bar yang Mewakili Standard Error of Mean

Pertama, ringkas data Anda dengan fungsi summarySE() dari paket Rmisc atau gunakan fungsi yang telah didefinisikan di atas. Lalu, Anda dapat menggunakan data frame hasilnya untuk memplot beberapa variabel, sekaligus menggambar error bar untuknya, misalnya menggunakan standard error of mean.

Untuk kemudahan, data serta fungsinya sudah dimuat untuk Anda:
Jika Anda ingin mengubah posisi error bar, misalnya ketika saling tumpang tindih, Anda bisa mempertimbangkan menggunakan fungsi position_dodge():
#Calculate some statistics for the chol dataset
cholc <- summarySE(chol, 
                   measurevar="CHOL", 
                   groupvars=c("MORT",
                               "SMOKER"))

#Plot the cholc dataset
library(ggplot2)
pd <- position_dodge(0.1)
ggplot(cholc, aes(x=SMOKER, 
                  y=CHOL, 
                  colour=MORT)) + 
    geom_errorbar(aes(ymin=CHOL-se,
                      ymax=CHOL+se, 
                      group=MORT), 
                  width=.1, 
                  position=pd) +
    geom_line(aes(group=MORT)) +
    geom_point()

Tip: jika Anda mendapat galat seperti “geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic?”, biasanya Anda perlu menyesuaikan estetika group.

Error Bar yang Mewakili Confidence Interval

Melanjutkan dari ringkasan data yang Anda buat dengan fungsi summarySE() dari pustaka Rmisc atau dari bagian sebelumnya, Anda juga dapat menggambar error bar yang merepresentasikan confidence interval. Dalam kasus ini, dibuat plot dengan error bar untuk confidence 95%.

#Calculate some statistics for the chol dataset
cholc <- summarySE(chol, 
                   measurevar="CHOL", 
                   groupvars=c("MORT",
                               "SMOKER"))

#Plot the cholc dataset
library(ggplot2)
pd <- position_dodge(0.1)
ggplot(cholc, aes(x=SMOKER, 
                  y=CHOL,
                  colour=MORT)) + 
    geom_errorbar(aes(ymin=CHOL-ci, 
                      ymax=CHOL+ci, 
                      group=MORT), 
                  width=.1, 
                  colour="black",
                  position=pd) +
    geom_line(aes(group=MORT)) +
    geom_point()

Perhatikan bagaimana warna error bar sekarang diatur menjadi hitam dengan argumen colour.

Error Bar yang Mewakili Simpangan Baku

Terakhir, Anda juga bisa menggunakan hasil dari fungsi summarySE() dari paket Rmisc atau dari definisi fungsi yang Anda salin dari salah satu bagian terakhir untuk memplot error bar yang merepresentasikan simpangan baku.

Secara khusus, Anda hanya perlu menyesuaikan argumen ymin dan ymax yang Anda berikan ke geom_errorbar():

#Calculate some statistics for the chol dataset
cholc <- summarySE(chol, 
                   measurevar="CHOL", 
                   groupvars=c("MORT","SMOKER"))

#Plot the cholc dataset
library(ggplot2)
pd <- position_dodge(0.1)
ggplot(cholc, aes(x=SMOKER, 
                  y=CHOL, 
                  colour=MORT)) + 
    geom_errorbar(aes(ymin=CHOL-sd, 
                      ymax=CHOL+sd, 
                      group=MORT), 
                  width=.1,
                  position=pd) +
    geom_line(aes(group=MORT)) +
    geom_point()

Tip besar*: lihat juga ini untuk contoh lebih rinci tentang cara memplot mean dan error bar.

11. Cara Menyimpan Plot sebagai Gambar di Disk

Anda bisa menggunakan dev.copy() untuk menyalin grafik Anda, yang dibuat pada graphics device saat ini, ke device atau folder yang Anda tentukan sendiri.

x <- seq(0,2*pi,0.1)
y <- sin(x)
plot(x,y)
dev.copy(jpeg,
         filename="<path to your file/name.jpg>");
dev.off();
(x)
(y)

12. Cara Memplot Dua Plot R Berdampingan

Memplot Dua Plot Berdampingan Menggunakan R Dasar

Anda bisa melakukannya dengan perintah R dasar:
# Data
d0 <- matrix(rnorm(15), ncol=3)
d1 <- matrix(rnorm(15), ncol=3)

# Set limits 
limits <- range(d0,d1)

# Set graphical parameter `mfrow`
par(mfrow = c(1, 2)) 

# Make 2 boxplots
boxplot(d0,
        ylim=limits)
boxplot(d1,
        ylim=limits)

Dengan menambahkan fungsi par() dengan argumen mfrow, Anda menentukan sebuah vektor, yang dalam kasus ini berisi 1 dan 2: semua gambar kemudian akan digambar dalam array 1-kali-2 pada device per baris (mfrow).

Dengan kata lain, boxplot di atas akan dicetak dalam satu baris di dalam dua kolom.

Memplot Dua Plot Berdampingan Menggunakan ggplot2

Jika Anda ingin menempatkan plot berdampingan dan tidak ingin menentukan batasan, Anda bisa mempertimbangkan menggunakan paket ggplot2 untuk menggambar plot berdampingan.

Data Anda chol dan fungsi summarySE() telah dimuat. Periksa di R Console jika Anda tidak yakin seperti apa bentuknya:

Perhatikan bahwa Anda cukup menambahkan fungsi facet_grid() untuk menunjukkan bahwa Anda menginginkan dua plot berdampingan. Elemen yang digunakan untuk menentukan bagaimana plot digambar adalah MORT, seperti yang terlihat di atas!

Memplot Lebih Banyak Plot Berdampingan Menggunakan gridExtra

Untuk mencetak plot berdampingan, Anda dapat menggunakan paket gridExtra; Pastikan paket sudah terpasang dan diaktifkan di workspace Anda lalu jalankan sesuatu seperti ini:
# Load in `gridExtra` and `ggplot2`
library(gridExtra)
library(ggplot2)

# Plot
plot1 <- qplot(1)
plot2 <- qplot(1)

# Arrange `plot1` and `plot2`
grid.arrange(plot1, 
             plot2, 
             ncol=2)

Perhatikan bagaimana Anda kembali menentukan bagaimana kedua plot akan tampil berkat argumen ncol.

Memplot Lebih Banyak Plot Berdampingan Menggunakan lattice

Seperti solusi dengan paket ggplot2, paket lattice juga tidak mengharuskan Anda menentukan batasan atau cara Anda ingin plot dicetak berdampingan.

Alih-alih, Anda menggunakan bwplot() untuk membuat grafik trellis dengan jenis grafik box plot. Grafik trellis menampilkan sebuah variabel atau hubungan antarvariabel, dengan pengondisian pada satu atau lebih variabel lain.

Dalam hal ini, jika Anda menggunakan set data chol (yang bisa Anda temukan di sini atau muat dengan fungsi read.table()), Anda menampilkan variabel CHOL secara terpisah untuk setiap kombinasi tingkat faktor SMOKE dan MORT.

Perhatikan bahwa data telah dimuat untuk Anda pada potongan DataCamp Light di bawah!

# Load `lattice`
library(lattice)

#Plot two plots side by side
bwplot(~ CHOL|SMOKER+MORT,
       chol)

Memplot Plot Berdampingan dengan gridBase

Cara lain untuk meletakkan dua plot berdampingan adalah dengan menggunakan paket gridBase, yang menangani “integrasi grafik base dan grid”. Ini berguna saat Anda ingin meletakkan plot R dasar dan ggplot berdampingan.

Cara kerjanya sebagai berikut: pertama, aktifkan paket yang diperlukan di workspace Anda. Dalam kasus ini, Anda ingin menyiapkan gridBase untuk meletakkan dua plot berdampingan dan grid serta ggplot2 untuk benar-benar membuat plotnya:

library(grid)
library(gridBase)
library(ggplot2)

plot.new()

gl <- grid.layout(nrow=1, 
                  ncol=2)
vp.1 <- viewport(layout.pos.col=1, 
                 layout.pos.row=1) 
vp.2 <- viewport(layout.pos.col=2, 
                 layout.pos.row=1)
                 
pushViewport(viewport(layout=gl))
pushViewport(vp.1)

par(new=TRUE, 
    fig=gridFIG())
plot(x = 1:10, 
     y = 10:1)
     
popViewport()

pushViewport(vp.2)

ggplotted <- qplot(x=1:10,y=10:1, 'point')
print(ggplotted, newpage = FALSE)

popViewport(1)

Jika perlu, Anda bisa memulai plot kosong untuk kemudian menyusun layout. Perhatikan bahwa karena Anda ingin kedua plot dihasilkan berdampingan, hal ini mengharuskan Anda membuat grid layout yang terdiri dari satu baris dan dua kolom.

Kini, Anda ingin mengisi sel-sel grid dengan viewport. Ini mendefinisikan area persegi panjang pada graphics device Anda dengan bantuan koordinat di dalam area tersebut. Dalam kasus ini, lebih praktis menggunakan spesifikasi grid yang baru saja dijelaskan daripada koordinat x atau y riil. Itulah mengapa Anda harus menggunakan argumen layout.pos.col dan layout.pos.row.

Karena viewport hanya berupa deskripsi atau definisi, objek semacam ini perlu didorong ke pohon viewport sebelum Anda bisa melihat efek pada gambar. Anda ingin menggunakan fungsi pushViewport() untuk melakukan ini.

Sekarang Anda bisa melanjutkan dengan menambahkan area persegi panjang pertama vp.1 ke pohon ViewPort, setelah itu beri tahu R dengan gridFig() untuk menggambar plot base di dalam grid viewport (vp.1). Argumen fig biasanya menerima koordinat area gambar di area tampilan device. Dalam kasus ini, Anda menggunakan argumen fig untuk memulai plot baru, menambahkannya ke plot yang ada dengan menambahkan new = TRUE pada fungsi par() juga. Anda memplot grafik base dan menghapus viewport dari pohon:

plot.new()

gl <- grid.layout(nrow=1, 
                  ncol=2)

vp.1 <- viewport(layout.pos.col=1, 
                 layout.pos.row=1) 
vp.2 <- viewport(layout.pos.col=2, 
                 layout.pos.row=1)

pushViewport(viewport(layout=gl))

pushViewport(vp.1)

par(new=TRUE, 
    fig=gridFIG())
plot(x = 1:10, 
     y = 10:1)
popViewport()

Karena Anda ingin kedua plot dihasilkan berdampingan, Anda ingin menempatkan satu plot di kolom pertama dan lainnya di kolom kedua, keduanya berada di baris pertama.

Perhatikan bahwa fungsi pushViewport() menerima fungsi viewport(), yang di dalamnya berisi argumen layout. Argumen terakhir ini menunjukkan “objek grid layout yang membagi viewport menjadi subwilayah”.

Perhatikan juga bahwa Anda dapat menentukan pada fungsi popViewport() sebuah argumen untuk menunjukkan berapa banyak viewport yang ingin Anda hapus dari pohon. Jika nilainya 0, ini menunjukkan bahwa Anda ingin menghapus viewport sampai ke root viewport. Nilai default argumen ini adalah 1.

Lanjutkan dengan menambahkan area persegi panjang kedua vp.2 ke pohon ViewPort. Anda kemudian dapat membuat ggplot dan menghapus viewport dari pohon.

pushViewport(vp.2)
ggplotted <- qplot(x=1:10,
                   y=10:1, 
                   'point')
print(ggplotted, 
      newpage = FALSE)
popViewport(1)

Perhatikan bahwa Anda perlu mencetak objek grafik yang dibuat oleh qplot() agar benar-benar tergambar dan ditampilkan. Pada saat yang sama, Anda juga perlu menentukan newpage = FALSE, jika tidak Anda hanya akan melihat qplot()…

Selain itu, ingat bahwa nilai default jumlah viewport yang akan dihapus pada fungsi popViewport() adalah 1. Ini membuat agak redundan untuk menulis popViewport(1) dalam kode.

13. Cara Memplot Beberapa Garis atau Titik

Menggunakan R Dasar untuk Memplot Beberapa Garis atau Titik dalam Plot R yang Sama

Untuk memplot dua atau lebih grafik dalam plot yang sama, Anda pada dasarnya mulai dengan membuat plot dasar yang biasa di R. Lalu, Anda mulai menambahkan lebih banyak garis atau titik ke plot tersebut. Dalam kasus ini, Anda menambahkan lebih banyak garis ke plot, sehingga Anda akan mendefinisikan lebih banyak sumbu y:
# Data
x <- seq(0,pi,0.1)
y1 <- cos(x)

# Plot
plot(x,
     y1,
     type="l",
     col = "red")

# More data
y2 <- sin(x)
y3 <- tan(x)
y4 <- log(x)

# Lines
lines(x,y2,col="green")
lines(x,y2,col="green")
lines(x,y3,col="black")
lines(x,y4,col="blue")

Selanjutnya, Anda melihat bahwa garis-garis ini diplot dengan menggunakan fungsi lines().

Ini memberikan hasil berikut:

Perhatikan bahwa fungsi lines() menerima tiga argumen: sumbu x dan sumbu y yang ingin Anda plot serta warna (diwakili dengan argumen col) yang ingin Anda gunakan. Anda juga dapat menyertakan fitur berikut:

FiturArgumenMasukan
Jenis garisltyInteger atau string karakter
Lebar garislwdInteger
Jenis plotpchInteger atau satu karakter
Gaya ujung garislendInteger atau string
Gaya sambungan garisljoinInteger atau string
Batas mitre garislmitreInteger < 1

Berikut beberapa contoh:

lines(x,y2,col="green", lty = 2, lwd = 3)
lines(x,y2,col="green", lty = 5, lwd = 2, pch = 2)
lines(x,y3,col="black", lty = 3, lwd = 5, pch = 3, lend = 0, ljoin = 2)
lines(x,y4,col="blue", lty = 1, lwd = 2, pch = 3, lend = 2, ljoin = 1, lmitre = 2)

Perhatikan bahwa argumen pch tidak berfungsi terlalu baik dengan fungsi lines() dan sebaiknya digunakan hanya dengan points().

Tip: jika Anda ingin memplot titik pada grafik yang sama, Anda dapat menggunakan fungsi points():
# Data
x <- seq(0,pi,0.1)
y5 <- x^3

# Points
points(x,
       y5,
       col="yellow")

Anda dapat menambahkan argumen yang sama ke fungsi points() seperti yang Anda lakukan pada fungsi lines() dan yang didaftarkan di atas. Ada beberapa tambahan, yaitu:

FiturArgumenMasukan
Warna latar (isi)bgHanya jika pch = 21:25
Pembesaran karakter (atau simbol)cexInteger

Contoh kode untuk argumen ini sebagai berikut:

points(x,y4,col="blue", pch=21, bg = "red") 
points(x, y5, col="yellow", pch = 5, bg = "blue") 
Jika Anda memasukkan perubahan ini ke dalam plot yang Anda lihat di atas, Anda akan mendapatkan hasil berikut:
# Data
x <- seq(0,pi,0.1)
y1 <- cos(x)

#basic graphical object
plot(x,y1,type="l" ,col = "red")

# More data
y2 <- sin(x)
y3 <- tan(x)
y4 <- log(x)
y5 <- x^3

#first layer
lines(x,y2,col="green", lty = 1, lwd = 3) 
#second layer
lines(x,y2,col="green", lty = 3, lwd = 2, pch = 2) 
#third layer
lines(x,y3,col="black", lty = 2, lwd = 1, pch = 3, lend = 0, ljoin = 2) 
#fourth layer
points(x,y4,col="blue", pch=21, bg = "red") 
#fifth layer
points(x, y5, col="yellow", pch = 24, bg = "blue") 

Menggunakan ggplot2 untuk Memplot Beberapa Garis atau Titik dalam Satu Plot R

Paket ggplot2 dengan mudah juga memungkinkan Anda membuat layer, yang memampukan Anda pada dasarnya memplot dua atau lebih grafik ke dalam plot R yang sama tanpa kesulitan dan cukup mudah:
# Load in `ggplot2`
library(ggplot2)

# Data
x <- 1:10
y1 <- c(2,4,6,8,7,12,14,16,18,20)
y2 <- rnorm(10, mean = 5)
df <- data.frame(x, y1, y2)

# basic graphical object
ggplot(df, aes(x)) +  
  # first layer
  geom_line(aes(y=y1), 
            colour="red") + 
  # second layer
  geom_line(aes(y=y2),      
            colour="green") 

14. Cara Mengunci Rasio Aspek untuk Plot R Anda

Jika Anda ingin menyimpan plot R sebagai gambar di mana sumbu-sumbunya proporsional terhadap ukurannya, itu tanda bahwa Anda ingin mengunci rasio aspek.

Menyesuaikan Rasio Aspek dengan R Dasar

Saat Anda bekerja dengan perintah R dasar untuk menghasilkan plot, Anda bisa menambahkan argumen asp dari fungsi plot(), diisi dengan sebuah integer, untuk menetapkan rasio aspek. Lihat contoh pertama ini tanpa rasio aspek yang ditetapkan:
# Data
x <- seq(0,2*pi,0.1)
y <- sin(x)

# Plot
plot(x,y)
Dan bandingkan sekarang dengan plot di mana rasio aspek ditetapkan dengan argumen asp:
# Data
x <- seq(0,2*pi,0.1)
y <- sin(x)

# Plot
plot(x,
     y, 
     asp=2)

Menyesuaikan Rasio Aspek untuk Plot Anda dengan ggplot2

Untuk mengunci rasio aspek pada plot ggplot2, Anda cukup menambahkan fungsi coord_fixed(), yang menyediakan “sistem koordinat skala tetap [yang] memaksa rasio tertentu antara representasi fisik unit data pada sumbu”.

Dengan kata lain, fungsi ini memungkinkan Anda menentukan jumlah unit pada sumbu y yang setara dengan satu unit pada sumbu x. Nilai default selalu 1, artinya satu unit pada sumbu x memiliki panjang yang sama dengan satu unit pada sumbu y. Jika rasio Anda ditetapkan lebih tinggi, unit pada sumbu y lebih panjang daripada unit pada sumbu x dan sebaliknya.

Bandingkan contoh berikut:
# Load in `ggplot2`
library(ggplot2)

# Data
df <- data.frame(x = runif(100, 0, 5),
                 y = runif(100, 0, 5))

# Plot
ggplot(df, aes(x=x, y=y)) + geom_point()
versus
# Load in `ggplot2`
library(ggplot2)

# Data
df <- data.frame(x = runif(100, 0, 5),
                 y = runif(100, 0, 5))

# Plot
ggplot(df, aes(x=x, y=y)) + 
  geom_point() + 
  coord_fixed(ratio=1)

Menyesuaikan Rasio Aspek untuk Plot Anda dengan MASS

Anda juga bisa mempertimbangkan menggunakan paket MASS, yang mencakup fungsi eqscplot(): fungsi ini menghasilkan plot dengan skala yang sama secara geometris. Ini dilakukan untuk scatterplot:
# Load in `MASS`
library(MASS)

# Data
x = chol$HEIGHT
y = chol$WEIGHT
z = as.numeric(chol$MORT)

# Plot 
eqscplot(x, 
         y, 
         ratio = 1, 
         col=c("red", "green"), 
         pch=c(1,2))

Tip: sebaiknya Anda memulai bingkai plot baru sebelum mengeksekusi kode di atas!

Perhatikan bahwa Anda dapat memberikan argumen tambahan ke fungsi eqscplot() untuk menyesuaikan tampilan scatterplot!

15. Apa Fungsi hjust dan vjust dalam ggplot2

Pada dasarnya, Anda menggunakan argumen ini saat ingin mengatur posisi teks pada ggplot Anda. hjust memungkinkan Anda menentukan perataan horizontal, sedangkan vjust ditujukan untuk mengontrol perataan vertikal. Lihat dokumentasi geom_text() untuk informasi lebih lanjut.

Untuk mendemonstrasikan apa yang terjadi, Anda dapat membuat data frame dari semua kombinasi faktor dengan fungsi expand.grid():

hjustvjust <- expand.grid(hjust=c(0, 0.5, 1),
                          vjust=c(0, 0.5, 1),
                          angle=c(0, 45, 90),
                          text="Text"
                          )

Perhatikan bahwa hjust dan vjust hanya bisa menerima nilai antara 0 dan 1.

  • 0 berarti teks rata kiri; Dengan kata lain, seluruh teks diratakan ke margin kiri. Ini biasanya yang Anda lihat saat bekerja dengan editor teks seperti Microsoft Word.
  • 1 berarti teks rata kanan: seluruh teks diratakan ke margin kanan.
Kemudian, Anda bisa memplot data frame yang baru saja Anda buat di atas dengan fungsi ggplot(), mendefinisikan sumbu x dan y masing-masing sebagai hjust dan vjust:
library(ggplot2)
ggplot(hjustvjust, aes(x=hjust, 
               y=vjust)) + 
    geom_point() +
    geom_text(aes(label=text, 
                  angle=angle, 
                  hjust=hjust, 
                  vjust=vjust)) + 
    facet_grid(~angle) +
    scale_x_continuous(breaks=c(0, 0.5, 1), 
                       expand=c(0, 0.2)) +
    scale_y_continuous(breaks=c(0, 0.5, 1), 
                       expand=c(0, 0.2))

Perhatikan juga bagaimana argumen hjust dan vjust ditambahkan ke geom_text(), yang menangani anotasi tekstual pada plot.

Pada plot di atas Anda melihat bahwa teks pada titik (0,0) rata kiri, baik secara horizontal maupun vertikal. Di sisi lain, teks pada titik (1,1) rata kanan pada arah horizontal maupun vertikal. Titik (0,5,0,5) berada tepat di tengah: tidak benar-benar rata kiri maupun rata kanan untuk arah horizontal dan vertikal.

Perhatikan bahwa ketika argumen ini didefinisikan untuk mengubah teks sumbu, perataan horizontal untuk teks sumbu ditentukan relatif terhadap keseluruhan plot, bukan terhadap sumbu x!
library(ggplot2)
df <- data.frame(x=LETTERS[1:3],
                 y=1:3)
p <- ggplot(df, aes(x,y)) + 
  geom_point() + 
  ylab("Very long label for y") + 
  theme(axis.title.y=element_text(angle=0))


p1 <- p + theme(axis.title.x=element_text(hjust=0)) + xlab("X-axis at hjust=0")
p2 <- p + theme(axis.title.x=element_text(hjust=0.5)) + xlab("X-axis at hjust=0.5")
p3 <- p + theme(axis.title.x=element_text(hjust=1)) + xlab("X-axis at hjust=1")

library(gridExtra)
grid.arrange(p1, p2, p3)
Juga, coba sendiri apa yang dilakukan pendefinisian argumen vjust untuk mengubah teks sumbu terhadap representasi plot Anda:
library(ggplot2)
df <- data.frame(x=c("a\na","b","cdefghijk","l"),
                 y=1:4)
p <- ggplot(df, aes(x,y)) + geom_point()

p1 <- p + theme(axis.text.x=element_text(vjust=0, colour="red")) + 
        xlab("X-axis labels aligned with vjust=0")
p2 <- p + theme(axis.text.x=element_text(vjust=0.5, colour="red")) + 
        xlab("X-axis labels aligned with vjust=0.5")
p3 <- p + theme(axis.text.x=element_text(vjust=1, colour="red")) + 
        xlab("X-axis labels aligned with vjust=1")


library(gridExtra)
grid.arrange(p,p1,p2,p3)

Untuk menuju diskusi asli yang sangat baik, dari mana kode di atas diadopsi, klik di sini.

Sebagai Catatan Terakhir…

Pantas untuk mengecek artikel ini, yang mencantumkan 10 kiat agar grafik R Anda tampil sebaik mungkin!

Juga, jika Anda ingin tahu lebih banyak tentang visualisasi data, Anda bisa mempertimbangkan untuk melihat kursus interaktif DataCamp tentang visualisasi data dengan ggvis, yang diberikan oleh Garrett Grolemund, penulis Hands on Programming with R, serta Data Science with R.

Atau mungkin kursus kami tentang pelaporan dengan R Markdown bisa menarik minat Anda!

Topik

Terkait

blogs

Tutorial Korelasi di R

blogs

Spaghetti Plot dan Jalur Badai

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026