Pemrograman Grafik
Pengantar
R umumya digunakan untuk analisis statistika formal, seperti pengujian, pemodelan, atau pun deskriptif. Namun selain untuk analisis tersebut, R juga dapat digunakan untuk membuat grafik. R menyajikan berbagai macam standar plot statistika termasuk scatterplot, boxplot, histograms, barplot, pie chart, dan basic 3D plots. Package standar grafik di dalam R adalah graphics
. Package tersebut sudah tersedia sewaktu instalasi R dan otomatis sudah diload, sehingga fungsi di dalam package tersebut bisa langsung digunakan. Terdapat package grafik lain juga seperti lattice
, grid
, dan ggplot2
. Fungsi yang ada di package graphics
tidak bisa digunakan di ggplot2
. Yang bisa sama sama digunakan adalah media/ devicesnya. Tetapi, jika media sudah diisi dengan fungsi di ggplot2
tidak bisa ditambahkan dengan fungsi-fungsi yang ada di package graphics
. Devices adalah tempat gambar akan dibuat. Kita dapat menyiapkan devices lebih dari satu, namun yang aktif hanya satu.
Beberapa fungsi dalam devices
- Untuk melihat daftar devices yang sudah dibuat
dev.list()
- Melihat devices yang sedang aktif
dev.cur()
- Mengganti devices yang aktif
dev.set(i)
diperlukan argumen nama atau pun index ke berapa. Device selain yang berbasis window isinya tidak bisa diakses kalau isinya belum ditutup
- Menutup device yang aktif
dev.off()
- Menutup semua device
graphics.off()
- Meng-copy isi dari device
dev.copy()
kemudian tuliskan tujuan peng-copy-an kemana
Package Grafik Dasar
Package grafis dasar secara otomatis sudah ada di R base
. Perintah dasar grafik pada package ini adalah plot
, dan plot ini harus disimpan pada suatu media. Di dalam fungsi plot
terdapat lebih dari satu argumen. Argumen yang utama dalam plot ini adalah mengenai grafik apa yang akan dibuat. Grafik ini default-nya adalah untuk scatter plot.
General form: plot(x,y, …)
Ilustrasi pembuatan plot
x <- rnorm(10) #objek x vektor acak sebaran normal sebanyak 10
y <- rnorm(10) #objek y vektor acak sebaran normal sebanyak 10
plot(x,y) #dibuatkan di dalam devices, kalau tidak disiapkan akan memanggil default, kemudian membuat scatter plot dari x dan y secara berpasangan. akan ada sebanyak 10 titik.
type
pada plot
Defaultnya adalah tipe titik/ point, namun dapat diganti dengan beberapa tipe yang tersedia
type= 'p'
titik, ini adalah tipe default.type= 'l'
garis, menghubungkan titik.type= 'b'
keduanya (garis dan titik) antara garis dan titik dipisahkan.type= 'c'
seperti ‘b’ tapi garisnya tidak over-laped.type= 'o'
keduanya (garis dan titik) overlaid, garis dan titik tersambung.type= 'n'
nothing, tidak ada gambar, plot kosong, menyiapkan plot/ devices saja, tapi isinya kosong. Tujuannya misalkan kalau membuat grafik dengan banyak pengulangan, dan dilakukan secara otomatis, langkah pertama siapkan dulu plotnya dengan tipe nothing, baru gunakan fungsi fungsi lain.type= 's'
(s kecil), tangga, segmen pertama horizontal. Pada tipe ini akan dibuat dengan menarik garis secara horizontal pada segmen pertama, kemudian membuat fungsi tangga.type= 'S'
(S besar), tangga, segmen pertama vertikal .type= 'h'
garis vertikal dari sumbu-x ke titik.
Ilustrasi membuat plot dengan beberapa tipe.
x1 <-1:40
y1 <- rnorm(40, 5, 1) # membangkitkan bilangan normal sebanyak 40 dengan nilai tengah 5 dan simpangan baku 1
Membuat plot type p
Membuat plot type o
Membuat plot type
n
Karakter Tipe Titik
Pilihan karakter untuk tipe plot yang ada titiknya misalkan tipe p
, tipe b
, tipe o
adalah dengan menggunakan fungsi pch
dan cex
. pch
mengubah point dari character, mengubah berdasarkan di keyboard. Secara default pch
terdiri dari 25 karakter, dan dapat juga untuk dicustom. cex
berhubungan dengan ukuran perbesar atau perkecil. Defaultnya =1, jika terasa terlalu besar bisa dikecilkan dengan memasukkan angka <1 dan bilangan positif. Kalau memperbesar gunakan >1.
Menggunakan fungsi pch
Cara 1
Cara 2 diisi dengan angka dari 1 - 25
Menggunakan fungsi
cex
Karakter Tipe Garis
Pilihan garis untuk plot tipe garis, misalkan tipe l
dapat menggunakan fungsi lty
dan lwd
. lty
(line type) dapat digunakan untuk mengganti tipe garis. Dapat diisi dengan suatu angka integer (1,2,dll). Defaultnya adalah 1= solid, 2= small breaks, dll. lwd
(line width) adalah fungsi yang mengatur ketebalan dari garis.
Menggunakan fungsi lty
Menggunakan fungsi
lwd
Sumbu pada Grafik
axes
bernilai boolean/ logicTRUE
danFALSE
. Defaultnya adalahT
, secara default kita akan menggambarkan sumbu dari axesnya X dan Y. Jika kita isikanaxes= F
maka sumbunya tidak akan digambarkan.
xlim
danylim
merupakan batas x dan y. Mengatur skala yang ada di grafik. Defaultnya akan diatur oleh data kita, jadi akan menghitung x dan y-nya dari data kita berapa. Misalkanxlim=c(0,10)
sumbu x akan disiapkan dari 0 sampe 10. Defaultnya menghitung minimum dan maximum dari data kita, itu yang digunakan untuk batas sumbu x dan y kita.
- untuk menambakan axis sesuai keinginan kita. misalkan data kita tulisannya januari feb dst, padahal terurutkan dalam huruf, bisa menggunakan
axis(1, c(1,2,5,10))
angka 1 menyatakan sumbu x di bawah, di dalam c berarti tic marknya akan dituliskan di mana.
box
untuk membuat kota axis
title
menambahkan label
Warna Grafik
warna default dari grafik adalah hitam. Fungsi col
atau color, dapat digunakan untuk mengubah warna default. Paling sederhana, warna tersebut dapat diganti dengan memasukkan numeric 1-8 (recycle), misalkan col=4
. Hanya ada 8 warna yang secara visual bisa dibedakan. Selain dengan numeric, dapat juga digunakan nama warna dalam bahasa inggris col="red"
. Daftar warna dapat dilihat dengan menggunakan fungsi colors()
. Untuk memberikan warna juga dapat menggunakan fungsi rgb()
, rainbow()
(warna gradasi, dll. Package lain untuk memberikan warna adalah colorspace
, colourpicker
, RColorBrewer
, dll
Melihat warna yang ada pada fungsi colors()
[1] "white" "aliceblue" "antiquewhite" "antiquewhite1"
[5] "antiquewhite2" "antiquewhite3" "antiquewhite4" "aquamarine"
[9] "aquamarine1" "aquamarine2" "aquamarine3" "aquamarine4"
[13] "azure" "azure1" "azure2" "azure3"
[17] "azure4" "beige" "bisque" "bisque1"
[21] "bisque2" "bisque3" "bisque4" "black"
[25] "blanchedalmond" "blue" "blue1" "blue2"
[29] "blue3" "blue4" "blueviolet" "brown"
[33] "brown1" "brown2" "brown3" "brown4"
[37] "burlywood" "burlywood1" "burlywood2" "burlywood3"
[41] "burlywood4" "cadetblue" "cadetblue1" "cadetblue2"
[45] "cadetblue3" "cadetblue4" "chartreuse" "chartreuse1"
[49] "chartreuse2" "chartreuse3" "chartreuse4" "chocolate"
[53] "chocolate1" "chocolate2" "chocolate3" "chocolate4"
[57] "coral" "coral1" "coral2" "coral3"
[61] "coral4" "cornflowerblue" "cornsilk" "cornsilk1"
[65] "cornsilk2" "cornsilk3" "cornsilk4" "cyan"
[69] "cyan1" "cyan2" "cyan3" "cyan4"
[73] "darkblue" "darkcyan" "darkgoldenrod"
[ reached getOption("max.print") -- omitted 582 entries ]
Fungsi rainbow()
untuk mebentuk gradasi warna
[1] "#FF0000" "#FFDB00" "#49FF00" "#00FF92" "#0092FF" "#4900FF" "#FF00DB"
Fungsi rgb()
untuk Intensity red green blue, outputnya kode hexacodenya
[1] "#4D33B3"
Membuat plot dengan memberikan warna menggunakan fungsi col()
Membuat plot dengan memberikan warna menggunakan fungsi
rgb()
Label pada Grafik
Pilihan pelabelan pada grafik:
main
label pada judul utama paling atas
sub
label pada sub judul paling bawah
xlab
label pada sumbu x
ylab
label pada sumbu y
Fungsi-fungsi grafik lain
Fungsi plot
digunakan hanya satu kali, jika digunakan lagi, grafik sebelumnya akan dihapus. Jika ingin menambahkan sesuatu pada grafik yang sudah ada, maka digunakan fungsi-fungsi:
points(x,y)
sama dengan plot, bedanya tipe defaultnya adalah karakter atau tipe plines(x,y
menambah tipe garis
ablines(a,b)
membuat garis fungsi y=a+bx,abline(h=y)
y nya adlah vektor numerik, maka akan membuat garis horizontal dari titik yang ada di y
abline(v=x)
secara vertikal, hanya garis lurus saja.segments
menambahkan garis lurus dari titikarrows
poligons(x,y)
membuat poligon dari titik terakhir ditarik lagi ke titik pertama
text(x,y, teks)
di dalam grafikmtext
di luar grafik, menuliskan label pada judul dan garis sumbu
f <- function(x) cumsum(x)
x <- 1:20
y <- f(x)
plot(x,y,xlab= "",ylab= "")
mtext("Plotting the expression",side=3,line=2.5)
# simbol yang dapat diguanakan di expression
mtext(expression(y[i]== sum(x[j],j==1,i)),side=3,line=0)
mtext("The first variable",side=1,line=3)
mtext("The second variable",side=2,line=3)
plot(x1,y1,type="p",xlab="Sumbu x",ylab="Sumbu y",main="Bilangan Acak Normal",col=rainbow(40),
pch=16,
cex=2,
xlim=c(0,50), # xilim diubah dari 0 sampai 50, x-nya diubah dari
ylim=c(2.5,7.5))
## Menambahkan titik
x2 <- 41:50
y2 <- rnorm(10,5,1)
points(x2,y2,cex=2)
# Menambahkan Garis
x3 <- rep(40.5,20)
y3 <- seq(min(c(y,y1)),max(c(y,y1)),length=20)
lines(x3,y3,col=4,lwd=2,lty=2)
abline(h=mean(y),col="red",lwd=2.5)
abline(a=2,b=1/10,col="maroon3",lwd=2,lty=2)
#menambahkan tanda panah
# koordinat awal dan akhir harus didefinisikan di x0 dan y0
arrows(x0=30,y0=3.5,x1=40,y1=mean(y)-.1,lwd=2)
#menambahkan tulisan dengan text
text(x=29,y=3.3,labels="Titik potong",cex=0.7)
text(x=3,y=7.3,labels="Data awal",cex=0.7)
text(x=46,y=7.3,labels="Data baru",cex=0.7)
Parameter Grafik
Parameter- parameter dari grafik dapat disetting ulang melalui fungsi grafiknya (plot
) atau melalui fungsi par()
. Pilihan yang dikontrol oleh fungsi par()
:
- text and symbols: adj, ann, cex, crt, exp, font, mex, mkh, pch, ps, smo, srt
- plot area: bty, new, pin, plt, pty, uin, usr, xpd
- axes and tickmarks: exp, lab, las, mgp, tck, xaxo, xaxs, xaxt, yaxp, yaxs, yaxt
- margins: mai, mar, mex, oma, omd, omi
- figure and page areas: fig, fin, fty, mfg, mfcol, mfrow, oma, omd, omi
- color: bg, col, fg, gamma
- misc: ask, col, err, lty, lwd
- information: lem, acc, cin, cra, csi, cxy, dev, cin, frm, omo, rsz, tsp, uin
Misal diinginkan mengubah 1 device dapat menampung 6 grafik dalam format 3x2
tmp <- par (mfrow=c(1,2))#megubah device menjadi 1x2
x <- rnorm(10) #objek x vektor acak sebaran normal sebanyak 10
y <- rnorm(10) #objek y vektor acak sebaran normal sebanyak 10
plot(x,y)
plot(y,x)
Untuk mengembalikan ke default menggunakan perintah
Menggambar banyak grafik dalam satu device
sewaktu membuat grafik ada beberapa nilai yang sudah disimpan dalam nilai default dan disimpan di dalam fungsi par
. Kadang kita ingin membuat beberapa grafik yang disimpan dalam satu device. Misal ingin membuat 6 grafik dalam 1 devices. Terdapat 3 cara untuk menampilkan beberapa grafik dalam satu devices:
- Mengubah setting parameter, parameter yang diubah
mfrow
ataumfcol
Sebagai contoh syntax yang dapat digunakan adalahpar(mfrow=c(2,2))
akan mengubah layout menjadi 2x2. Setting margin sepertimar
untuk meningkatkan/ menurunkan ruang sekeliling plot danoma
untuk meningkatkan/ menurunkan ruang antara matriks plotpar(mfrow=c(1,1))
mengembalikan ke layout default.
x <- rnorm(10)
y<- rnorm (10)
tmp <- par(mfrow=c(2,2))
plot(x=1:10,x)
plot(x=1:10,y)
boxplot(x)
boxplot(y)
- Split screen dengan fungsi
split.screen()
split.screen(c(2,2))
fungsi ini akan seperti par(mfrow=c(2,2))
. Untuk berpindah antar area plot menggunakan fungsi screen(i)
. Untuk mengembalikan ke default menggunakan fungsi close.screen(all=T)
.
[1] 1 2 3 4
- Fungsi
layout
Dengan fungsilayout()
ukuran grafiknya lebih fleksibel (bervariasi) dibandingkan dengan setting parameter atau fungsisplit.screen()
. Langkah pertama adalah membuat matriks rancangan dengan nilai integer positif (untuk area grafik) dan 0 untuk area kosong. Misalkan akan digambar 4 grafik dengan area: Grafik 1 berukuran 1x1. Grafik 2 berukuran 1x1. Grafik 3 berukuran 1x2. Grafik 4 berukuran 1x2.
Package Grafik Berbasis Grammar
Package yang digunakan adalah ggplot2
, dan package ini harus diinstall terlebih dahulu. Terdapat 4 komponen grammar
geom
geometrik, bentuk data yang diinginkan,bar
,point
,line
,ribbon
,text
aesthetic
mengatur bagaimana geom ditampilkanx position
,y position
,color
,fill
,shape
,size
stat
data yang mau ditampilkan apa, apakah data aslinya misal point, atau banyak bar misalkan dalam histogram.
scale
konversi dari raw data.
Package ggplot2
menyediakan 2 fungsi untuk membuat grammar graphics yaitu qplot()
dan ggplot()
. qplot()
menggunakan sebagian dari fungsi grammar grafik, untuk grafik umum dapat digunakan.
qplot
Ilustrasi qplot
untuk satu data kategorik, secara otomatis membuat bar chart dari factor.
Ilustrasi qplot
untuk peubah numerik. Ketika dibeli objek numerik otomatis dibentuk menjadi histogram.
Ilustrasi qplot
untuk dua peubah kategorik. Meskipun grafik yang dihasilkan menjadi tidak bermanfaat.
Ilustrasi qplot
untuk dua peubah numerik
Ilustrasi qplot
untuk dua peubah, kategorik dan numerik
ggplot
Perbedaan ggplot
dengan qplot
adalah, jika qplot
langsung menampilkan grafik, maka ggplot
akan membuat objek grafiknya terlebih dahulu baru ditampilkan. Untuk menampilkannya dengan menambahkan layer. Grafik dalam ggplot
menggunakan layer-layer. Menambahan layer dapat menggunakan fungsi layer
, stat
, atau geom
. Komponen geom
adalah layer untuk bentuk grafik, sedangkan komponen stat
adalah layer untuk data yang ditampilkan. Kita dapat menggunakan salah satunya. geom
dan stat
umumnya memiliki default berpasangan, tetapi ada beberapa geom
dan stat
yang defaultnya berbeda. Untuk dapat mengakses komponen pada geom
dapat menggunakan perintah apropos("^geom_")
. Untuk dapat mengakses komponen pada stat
dapat menggunakan perintah apropos("^stat_")
Akses komponen pada geom
[1] "geom_abline" "geom_area" "geom_bar"
[4] "geom_bin2d" "geom_blank" "geom_boxplot"
[7] "geom_col" "geom_contour" "geom_contour_filled"
[10] "geom_count" "geom_crossbar" "geom_curve"
[13] "geom_density" "geom_density_2d" "geom_density_2d_filled"
[16] "geom_density2d" "geom_density2d_filled" "geom_dotplot"
[19] "geom_errorbar" "geom_errorbarh" "geom_freqpoly"
[22] "geom_function" "geom_hex" "geom_histogram"
[25] "geom_hline" "geom_jitter" "geom_label"
[28] "geom_line" "geom_linerange" "geom_map"
[31] "geom_path" "geom_point" "geom_pointrange"
[34] "geom_polygon" "geom_qq" "geom_qq_line"
[37] "geom_quantile" "geom_raster" "geom_rect"
[40] "geom_ribbon" "geom_rug" "geom_segment"
[43] "geom_sf" "geom_sf_label" "geom_sf_text"
[46] "geom_smooth" "geom_spoke" "geom_step"
[49] "geom_text" "geom_tile" "geom_violin"
[52] "geom_vline"
Akses komponen pada stat
[1] "stat_bin" "stat_bin_2d" "stat_bin_hex"
[4] "stat_bin2d" "stat_binhex" "stat_boxplot"
[7] "stat_contour" "stat_contour_filled" "stat_count"
[10] "stat_density" "stat_density_2d" "stat_density_2d_filled"
[13] "stat_density2d" "stat_density2d_filled" "stat_ecdf"
[16] "stat_ellipse" "stat_function" "stat_identity"
[19] "stat_qq" "stat_qq_line" "stat_quantile"
[22] "stat_sf" "stat_sf_coordinates" "stat_smooth"
[25] "stat_spoke" "stat_sum" "stat_summary"
[28] "stat_summary_2d" "stat_summary_bin" "stat_summary_hex"
[31] "stat_summary2d" "stat_unique" "stat_ydensity"
ggplot(mpg,aes(displ,hwy))+
layer(geom= "point",stat = "identity",position= "identity",params= list(na.rm =FALSE))
komponen geom
bentuk grafik dan stat
data yang ditampilkan.
Menyimpan Grafik
menggunakan fungsi ggsave()
yang akan diperiksa akhiran filenya. jika akhiran file JPEG maka otomatis menggunakan akhir JPEG.
Latihan
x <- rchisq(100,df=4)
hist(x,freq=FALSE,ylim=c(0,0.2))
curve(dchisq(x,df=4),col=2,lty=2,lwd=2,add=TRUE)
Pemecahan Canvas
par(mfrow=c(2,2))
plot(1:40,y=rnorm(40),type="p",xlab="Sumbu x",ylab="Sumbu y",
main="Bilangan Acak Normal",col=2,pch=16)
plot(sin,-pi, 2*pi)
plot(table(rpois(100,5)),type="h",col="red",
lwd=1,main="rpois(100,lambda=5)")
plot(a1,a2,type="n",main="W")
text(a1,a2,labels=paste("w",1:25,sep=""),
col=rainbow(25),cex=0.8)
par(mfcol=c(2,2))
plot(1:40,y=rnorm(40),type="p",xlab="Sumbu x",ylab="Sumbu y",
main="Bilangan Acak Normal",col=2,pch=16)
plot(sin,-pi, 2*pi)
plot(table(rpois(100,5)),type="h",col="red",lwd=1,
main="rpois(100,lambda=5)")
plot(a1,a2,type="n",main="W")
text(a1,a2,labels=paste("w",1:25,sep=""),
col=rainbow(25),cex=0.8)
[1] 5 6 7 8
# dapat memilih screen untuk ditampilkan terlebih dahulu
screen(3)
boxplot(yb)
title("Boxplot Bilangan Acak Normal",cex.main=0.7)
screen(4)
xb <- 1:100
plot(xb,yb,type="l",lwd=2,col="blue")
title("Line Plot Bilangan Acak Normal",cex.main=0.7)
screen(2)
hist(yb,freq=FALSE,main=NULL,ylim=c(0,0.5))
x <- yb
curve(dnorm(x,5,1),col="red",lty=2,lwd=2,add=TRUE)
title("Histogram Bilangan Acak Normal",cex.main=0.7)
screen(1)
plot(xb,yb,pch=16,col=rainbow(100))
title("Scatter Plot Bilangan Acak Normal",cex.main=0.7)
Referensi
Raharjo, Mulianto. (3 Maret 2021). STA561 Pemrograman Statistika: Grafik. Retrieved from https://newlms.ipb.ac.id/
Soleh, A.M. (2021). STA561 Pemrograman Statistika: Pemrograman Grafik. Retrieved from https://newlms.ipb.ac.id/
https://www.stat.auckland.ac.nz/~paul/RGraphics/chapter1.pdf