Pengantar
ggplot2 merupakan implementasi the Grammar of Graphics oleh Leland Wilkinson yang merepresentasikan dan mengabstraksi ide atau objek grafik. Package ini dibuat oleh Hadley Wickham (sewaktu masih mahasiswa Iowa State). ggplot2 merupakan “sistem ketiga” grafik R (sebelumnya: base and lattice). Tersedia di CRAN via install.packages("ggplot2")
Komponen Grammar
Terdapat 4 komponen grammar:
- geom: geometric “bentuk” untuk menampilkan data dalam bentuk
bar, point, line, ribbon, text, dll
- aesthetic: atribut untuk mengatur bagaimana geom ditampilkan seperti pada
x position, y position, color, fill, shape, size, dll
- stat: transformasi data sebelum geom digunakan. contoh: histogram menggunakan bin, dll
- scale: konversi data mentah (raw
Fungsi untuk Grammar Graphics
Package ggplot2, menyediakan dua fungsi untuk membuat grammar graphics:
qplot():
- Atau bisa disebut quick plot
- Menggunakan sebagian konsep dari grammar graphics
- Dirancang untuk lebih familiar dengan fungsi
plot()
- Membuat grafik lebih mudah dan cepat
ggplot(): Memberikan kapabilitas penuh dari grammar graphics
Fungsi qplot()
Fungsi ini mudah digunakan karena hanya membutuhkan:
- satu (atau dua) nama peubah data yang akan ditampilkan
- data frame yang memuat peubah tersebut (optional)
qplot() akan menginspeksi peubah tersebut dan mencoba membuat plot yang masuk akal
Ilustrasi qplot()
Ilustrasi dalam praktikum ini akan menggunakan Data: CO2 (Carbon Dioxide Uptake in Grass Plants)
Deskripsi: Dataframe CO2 yang memiliki 84 baris dan 5 kolom data dari percobaan terhadap toleransi dingin rumput dengan spesies Echinochloa crus-galli.
Dengan peubah sebagai berikut:
- Plant: faktor terurut dengan level
Qn1 < Qn2 < Qn3 < ... < Mc1 memberikan pengidentifikasi unik untuk setiap tanaman.
- Type: faktor dengan tingkat
Quebec dan Mississippi yang merupakan daerah asal tanaman
- Treatment: faktor dengan tingkat
nonchilled dan chilled yang merupakan jenis perlakuan (dingin/tidak dingin)
- conc: vektor numerik konsentrasi karbon dioksida ambien (mL/L).
- uptake: vektor numerik tingkat penyerapan karbon dioksida (umol/m^2 detik).
satu peubah kategorik

qplot menghasilkan barplot frekuensi dari masing-masing level pada peubah Plant.
satu peubah numerik

qplot menghasilkan histogram dari peubah uptake.
dua peubah kategorik
qplot(Plant, Type, data=CO2)

qplot menghasilkan grafik yang kurang informatif, karena dari level Plant kita sudah bisa mengetahui asal daerahnya. Misal nama plant diawali huruf M berarti berasal dari Mississippi.
dua peubah numerik
qplot(conc, uptake, data=CO2)

qplot menghasilkan grafik yang sama dengan ketika menggunakan fungsi plot(x,y)
plot(CO2$conc, CO2$uptake)

dua peubah kategorik dan numerik
qplot(Treatment, uptake, data=CO2, geom=c("boxplot","jitter"))

qplot dapat diatur agar menampilkan boxplot ditambah dengan jitter. Boxplot di atas dapat memberikan insight terkait hasil eksperimen terhadap penyerapan CO2 pada suhu dingin dan tidak dingin. Salah satunya yaitu penyerapan CO2 relatif lebih rendah pada suhu dingin.
Penutup qplot()
qplot() sudah sangat memadai, tetapi tidak memberikan kapabilitas penuh ggplot.
Fungsi ggplot()
- Fungsi
ggplot() memberikan objek ggplot
- Argumen dalam ggplot menetapkan data yang digunakan dan aesthetics
- Untuk menggambarkan grafik dibutuhkan layer
- Menambahkan layer dapat menggunakan fungsi
layer, fungsi stat, atau fungsi geom
Ilustrasi
ggplot(CO2, aes(conc, uptake)) + geom_point()

menghasilkan grafik yang sama seperti berikut.
ggplot(CO2, aes(conc, uptake)) +
layer(geom = "point", stat = "identity", position = "identity", params = list(na.rm = FALSE))

geom dan stat
Fungsi geom adalah layer untuk membentuk grafik
fgeom <- data.frame(apropos("^geom"))
fgeom
Fungsi stat adalah layer untuk data yang ditampilkan
fstat <- data.frame(apropos("^stat"))
fstat
Gunakan salah satunya saja karena umumnya memiliki default berpasangan,tetapi ada beberapa geom dan stat yang defaultnya berbeda sehingga harus hati-hati dalam menggunakannya. Seperti pada:
geom_density defaultnya adalah stat_density
stat_density defaultnya adalah geom_area
Menyimpan Grafik
Menyimpan grafik dapat dilakukan dengan menggunakan fungsi ggsave() .
- Fungsi ini akan menyimpan plot yang terakhir ditampilkan. Misal dibuat plot berikut.
ggplot(data=CO2, aes(conc, uptake, color=Treatment)) + geom_point()

- Menyimpan grafik membutuhkan nama file serta ektensi dari tipe file yang diinginkan, seperti:
.ps .eps .tex .pdf .jpg .tiff .png .bmp .svg .wmf
Saving 7 x 7 in image
ggsave(file="plot1.png")
ggsave(file="plot1.pdf")
plot disimpan dalam ukuran defaultnya.
- Menyimpan grafik dalam ukuran yang ditentukan
ggsave(file="plot2.jpg", scale = 2)
Saving 7 x 7 in image
ggsave(file="plot3.jpg", width = 5, height = 5, units = "in")
LS0tDQp0aXRsZTogIlBlbXJvZ3JhbWFuIEdyYWZpayBkZW5nYW4gUGFja2FnZSBnZ3Bsb3QyIg0KYXV0aG9yOiAiQW5uaXNzYSBOdXIgRml0cmlhIEZhdGhpbmFeW01haGFzaXN3YSBTdGF0aXN0aWthIGRhbiBTYWlucyBEYXRhIElQQiwgYW5uaXNzYV9uZmZAYXBwcy5pcGIuYWMuaWRdIg0KZGF0ZTogIjE1LzQvMjAyMiINCm91dHB1dDogDQogIGh0bWxfbm90ZWJvb2s6DQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDMNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICB0aGVtZTogam91cm5hbA0KICAgIGhpZ2hsaWdodDogdGFuZ28NCmVkaXRvcl9vcHRpb25zOiANCiAgbWFya2Rvd246IA0KICAgIHdyYXA6IHNlbnRlbmNlDQotLS0NCg0KIyBQZW5nYW50YXINCmdncGxvdDIgbWVydXBha2FuIGltcGxlbWVudGFzaSB0aGUgR3JhbW1hciBvZiBHcmFwaGljcyBvbGVoIExlbGFuZCBXaWxraW5zb24geWFuZyBtZXJlcHJlc2VudGFzaWthbiBkYW4gbWVuZ2Fic3RyYWtzaSBpZGUgYXRhdSBvYmplayBncmFmaWsuIFBhY2thZ2UgaW5pIGRpYnVhdCBvbGVoIEhhZGxleSBXaWNraGFtIChzZXdha3R1IG1hc2loIG1haGFzaXN3YSBJb3dhIFN0YXRlKS4NCmdncGxvdDIgbWVydXBha2FuICJzaXN0ZW0ga2V0aWdhIiBncmFmaWsgUiAoc2ViZWx1bW55YTogYmFzZSBhbmQgbGF0dGljZSkuDQpUZXJzZWRpYSBkaSBDUkFOIHZpYSBgaW5zdGFsbC5wYWNrYWdlcygiZ2dwbG90MiIpYA0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQpgYGANCg0KDQojIEtvbXBvbmVuIEdyYW1tYXINClRlcmRhcGF0IDQga29tcG9uZW4gZ3JhbW1hcjoNCg0KLSAgIGdlb206IGdlb21ldHJpYyAiYmVudHVrIiB1bnR1ayBtZW5hbXBpbGthbiBkYXRhIGRhbGFtIGJlbnR1ayBgYmFyYCwgYHBvaW50YCwgYGxpbmVgLCBgcmliYm9uYCwgYHRleHRgLCBkbGwNCi0gICBhZXN0aGV0aWM6IGF0cmlidXQgdW50dWsgbWVuZ2F0dXIgYmFnYWltYW5hIGdlb20gZGl0YW1waWxrYW4gc2VwZXJ0aSBwYWRhIGB4IHBvc2l0aW9uYCwgYHkgcG9zaXRpb25gLCBgY29sb3JgLCBgZmlsbGAsIGBzaGFwZWAsIGBzaXplYCwgZGxsDQotICAgc3RhdDogdHJhbnNmb3JtYXNpIGRhdGEgc2ViZWx1bSBnZW9tIGRpZ3VuYWthbi4gY29udG9oOiBoaXN0b2dyYW0gbWVuZ2d1bmFrYW4gYmluLCBkbGwNCi0gICBzY2FsZToga29udmVyc2kgZGF0YSBtZW50YWggKHJhdw0KDQojIEZ1bmdzaSB1bnR1ayBHcmFtbWFyIEdyYXBoaWNzDQpQYWNrYWdlIGBnZ3Bsb3QyYCwgbWVueWVkaWFrYW4gZHVhIGZ1bmdzaSB1bnR1ayBtZW1idWF0IGdyYW1tYXIgZ3JhcGhpY3M6DQoNCmBxcGxvdCgpYDoNCg0KLSAgIEF0YXUgYmlzYSBkaXNlYnV0IHF1aWNrIHBsb3QNCi0gICBNZW5nZ3VuYWthbiBzZWJhZ2lhbiBrb25zZXAgZGFyaSBncmFtbWFyIGdyYXBoaWNzDQotICAgRGlyYW5jYW5nIHVudHVrIGxlYmloIGZhbWlsaWFyIGRlbmdhbiBmdW5nc2kgYHBsb3QoKWANCi0gICBNZW1idWF0IGdyYWZpayBsZWJpaCBtdWRhaCBkYW4gY2VwYXQNCg0KYGdncGxvdCgpYDoNCk1lbWJlcmlrYW4ga2FwYWJpbGl0YXMgcGVudWggZGFyaSBncmFtbWFyIGdyYXBoaWNzDQoNCiMgRnVuZ3NpIGBxcGxvdCgpYA0KRnVuZ3NpIGluaSBtdWRhaCBkaWd1bmFrYW4ga2FyZW5hIGhhbnlhIG1lbWJ1dHVoa2FuOg0KDQotICAgc2F0dSAoYXRhdSBkdWEpIG5hbWEgcGV1YmFoIGRhdGEgeWFuZyBha2FuIGRpdGFtcGlsa2FuDQotICAgZGF0YSBmcmFtZSB5YW5nIG1lbXVhdCBwZXViYWggdGVyc2VidXQgKG9wdGlvbmFsKQ0KDQpgcXBsb3QoKWAgYWthbiBtZW5naW5zcGVrc2kgcGV1YmFoIHRlcnNlYnV0IGRhbiBtZW5jb2JhIG1lbWJ1YXQgcGxvdCB5YW5nIG1hc3VrIGFrYWwNCg0KIyMgSWx1c3RyYXNpIGBxcGxvdCgpYA0KSWx1c3RyYXNpIGRhbGFtIHByYWt0aWt1bSBpbmkgYWthbiBtZW5nZ3VuYWthbiBEYXRhOiBgQ08yYCAoQ2FyYm9uIERpb3hpZGUgVXB0YWtlIGluIEdyYXNzIFBsYW50cykNCg0KRGVza3JpcHNpOg0KRGF0YWZyYW1lIENPMiB5YW5nIG1lbWlsaWtpIDg0IGJhcmlzIGRhbiA1IGtvbG9tIGRhdGEgZGFyaSBwZXJjb2JhYW4gdGVyaGFkYXAgdG9sZXJhbnNpIGRpbmdpbiBydW1wdXQgZGVuZ2FuIHNwZXNpZXMgRWNoaW5vY2hsb2EgY3J1cy1nYWxsaS4NCg0KRGVuZ2FuIHBldWJhaCBzZWJhZ2FpIGJlcmlrdXQ6DQoNCi0gICBQbGFudDogZmFrdG9yIHRlcnVydXQgZGVuZ2FuIGxldmVsIGBRbjEgPCBRbjIgPCBRbjMgPCAuLi4gPCBNYzFgIG1lbWJlcmlrYW4gcGVuZ2lkZW50aWZpa2FzaSB1bmlrIHVudHVrIHNldGlhcCB0YW5hbWFuLg0KLSAgIFR5cGU6IGZha3RvciBkZW5nYW4gdGluZ2thdCBgUXVlYmVjYCBkYW4gYE1pc3Npc3NpcHBpYCB5YW5nIG1lcnVwYWthbiBkYWVyYWggYXNhbCB0YW5hbWFuDQotICAgVHJlYXRtZW50OiBmYWt0b3IgZGVuZ2FuIHRpbmdrYXQgYG5vbmNoaWxsZWRgIGRhbiBgY2hpbGxlZGAgeWFuZyBtZXJ1cGFrYW4gamVuaXMgcGVybGFrdWFuIChkaW5naW4vdGlkYWsgZGluZ2luKQ0KLSAgIGNvbmM6IHZla3RvciBudW1lcmlrIGtvbnNlbnRyYXNpIGthcmJvbiBkaW9rc2lkYSBhbWJpZW4gKG1ML0wpLg0KLSAgIHVwdGFrZTogdmVrdG9yIG51bWVyaWsgdGluZ2thdCBwZW55ZXJhcGFuIGthcmJvbiBkaW9rc2lkYSAodW1vbC9tXjIgZGV0aWspLg0KDQojIyMgc2F0dSBwZXViYWgga2F0ZWdvcmlrDQpgYGB7cn0NCnFwbG90KFBsYW50LCBkYXRhPUNPMikNCmBgYA0KDQpxcGxvdCBtZW5naGFzaWxrYW4gYmFycGxvdCBmcmVrdWVuc2kgZGFyaSBtYXNpbmctbWFzaW5nIGxldmVsIHBhZGEgcGV1YmFoIFBsYW50Lg0KDQojIyMgc2F0dSBwZXViYWggbnVtZXJpaw0KYGBge3J9DQpxcGxvdCh1cHRha2UsIGRhdGE9Q08yKQ0KYGBgDQoNCnFwbG90IG1lbmdoYXNpbGthbiBoaXN0b2dyYW0gZGFyaSBwZXViYWggdXB0YWtlLg0KDQojIyMgZHVhIHBldWJhaCBrYXRlZ29yaWsNCmBgYHtyfQ0KcXBsb3QoUGxhbnQsIFR5cGUsIGRhdGE9Q08yKQ0KYGBgDQpxcGxvdCBtZW5naGFzaWxrYW4gZ3JhZmlrIHlhbmcga3VyYW5nIGluZm9ybWF0aWYsIGthcmVuYSBkYXJpIGxldmVsIFBsYW50IGtpdGEgc3VkYWggYmlzYSBtZW5nZXRhaHVpIGFzYWwgZGFlcmFobnlhLiBNaXNhbCBuYW1hIHBsYW50IGRpYXdhbGkgaHVydWYgTSBiZXJhcnRpIGJlcmFzYWwgZGFyaSBNaXNzaXNzaXBwaS4NCg0KIyMjIGR1YSBwZXViYWggbnVtZXJpaw0KYGBge3J9DQpxcGxvdChjb25jLCB1cHRha2UsIGRhdGE9Q08yKQ0KYGBgDQoNCnFwbG90IG1lbmdoYXNpbGthbiBncmFmaWsgeWFuZyBzYW1hIGRlbmdhbiBrZXRpa2EgbWVuZ2d1bmFrYW4gZnVuZ3NpIHBsb3QoeCx5KQ0KYGBge3J9DQpwbG90KENPMiRjb25jLCBDTzIkdXB0YWtlKQ0KYGBgDQoNCiMjIyBkdWEgcGV1YmFoIGthdGVnb3JpayBkYW4gbnVtZXJpaw0KYGBge3J9DQpxcGxvdChUcmVhdG1lbnQsIHVwdGFrZSwgZGF0YT1DTzIsIGdlb209YygiYm94cGxvdCIsImppdHRlciIpKQ0KYGBgDQoNCnFwbG90IGRhcGF0IGRpYXR1ciBhZ2FyIG1lbmFtcGlsa2FuIGJveHBsb3QgZGl0YW1iYWggZGVuZ2FuIGppdHRlci4gQm94cGxvdCBkaSBhdGFzIGRhcGF0IG1lbWJlcmlrYW4gaW5zaWdodCB0ZXJrYWl0IGhhc2lsIGVrc3BlcmltZW4gdGVyaGFkYXAgcGVueWVyYXBhbiBDTzIgcGFkYSBzdWh1IGRpbmdpbiBkYW4gdGlkYWsgZGluZ2luLiBTYWxhaCBzYXR1bnlhIHlhaXR1IHBlbnllcmFwYW4gQ08yIHJlbGF0aWYgbGViaWggcmVuZGFoIHBhZGEgc3VodSBkaW5naW4uDQoNCiMjIFBlbnV0dXAgYHFwbG90KClgDQpgcXBsb3QoKWAgc3VkYWggc2FuZ2F0IG1lbWFkYWksIHRldGFwaSB0aWRhayBtZW1iZXJpa2FuIGthcGFiaWxpdGFzIHBlbnVoIGdncGxvdC4NCg0KIyBGdW5nc2kgYGdncGxvdCgpYA0KDQotICAgRnVuZ3NpIGBnZ3Bsb3QoKWAgbWVtYmVyaWthbiBvYmplayBnZ3Bsb3QNCi0gICBBcmd1bWVuIGRhbGFtIGdncGxvdCBtZW5ldGFwa2FuIGRhdGEgeWFuZyBkaWd1bmFrYW4gZGFuIGFlc3RoZXRpY3MNCi0gICBVbnR1ayBtZW5nZ2FtYmFya2FuIGdyYWZpayBkaWJ1dHVoa2FuIGxheWVyDQotICAgTWVuYW1iYWhrYW4gbGF5ZXIgZGFwYXQgbWVuZ2d1bmFrYW4gZnVuZ3NpIGBsYXllcmAsIGZ1bmdzaSBgc3RhdGAsIGF0YXUgZnVuZ3NpIGBnZW9tYA0KDQojIyBJbHVzdHJhc2kNCmBgYHtyfQ0KZ2dwbG90KENPMiwgYWVzKGNvbmMsIHVwdGFrZSkpICsgZ2VvbV9wb2ludCgpDQpgYGANCg0KbWVuZ2hhc2lsa2FuIGdyYWZpayB5YW5nIHNhbWEgc2VwZXJ0aSBiZXJpa3V0Lg0KYGBge3J9DQpnZ3Bsb3QoQ08yLCBhZXMoY29uYywgdXB0YWtlKSkgKyANCiAgbGF5ZXIoZ2VvbSA9ICJwb2ludCIsIHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9ICJpZGVudGl0eSIsIHBhcmFtcyA9IGxpc3QobmEucm0gPSBGQUxTRSkpDQpgYGANCg0KIyMgZ2VvbSBkYW4gc3RhdA0KDQpGdW5nc2kgYGdlb21gIGFkYWxhaCBsYXllciB1bnR1ayBtZW1iZW50dWsgZ3JhZmlrDQpgYGB7cn0NCmZnZW9tIDwtIGRhdGEuZnJhbWUoYXByb3BvcygiXmdlb20iKSkNCmZnZW9tDQpgYGANCg0KRnVuZ3NpIGBzdGF0YCBhZGFsYWggbGF5ZXIgdW50dWsgZGF0YSB5YW5nIGRpdGFtcGlsa2FuDQpgYGB7cn0NCmZzdGF0IDwtIGRhdGEuZnJhbWUoYXByb3BvcygiXnN0YXQiKSkNCmZzdGF0DQpgYGANCg0KR3VuYWthbiBzYWxhaCBzYXR1bnlhIHNhamEga2FyZW5hIHVtdW1ueWEgbWVtaWxpa2kgZGVmYXVsdCBiZXJwYXNhbmdhbix0ZXRhcGkgYWRhIGJlYmVyYXBhIGdlb20gZGFuIHN0YXQgeWFuZyBkZWZhdWx0bnlhIGJlcmJlZGEgc2VoaW5nZ2EgaGFydXMgaGF0aS1oYXRpIGRhbGFtIG1lbmdndW5ha2FubnlhLiBTZXBlcnRpIHBhZGE6DQoNCi0gICBgZ2VvbV9kZW5zaXR5YCBkZWZhdWx0bnlhIGFkYWxhaCBgc3RhdF9kZW5zaXR5YA0KLSAgIGBzdGF0X2RlbnNpdHlgIGRlZmF1bHRueWEgYWRhbGFoIGBnZW9tX2FyZWFgDQoNCiMgTWVueWltcGFuIEdyYWZpaw0KTWVueWltcGFuIGdyYWZpayBkYXBhdCBkaWxha3VrYW4gZGVuZ2FuIG1lbmdndW5ha2FuIGZ1bmdzaSBgZ2dzYXZlKClgIC4gDQoNCi0gICBGdW5nc2kgaW5pIGFrYW4gbWVueWltcGFuIHBsb3QgeWFuZyB0ZXJha2hpciBkaXRhbXBpbGthbi4gTWlzYWwgZGlidWF0IHBsb3QgYmVyaWt1dC4NCmBgYHtyfQ0KZ2dwbG90KGRhdGE9Q08yLCBhZXMoY29uYywgdXB0YWtlLCBjb2xvcj1UcmVhdG1lbnQpKSArIGdlb21fcG9pbnQoKQ0KYGBgDQoNCi0gICBNZW55aW1wYW4gZ3JhZmlrIG1lbWJ1dHVoa2FuIG5hbWEgZmlsZSBzZXJ0YSBla3RlbnNpIGRhcmkgdGlwZSBmaWxlIHlhbmcgZGlpbmdpbmthbiwgc2VwZXJ0aTogDQoNCmAucHNgIGAuZXBzYCBgLnRleGAgYC5wZGZgIGAuanBnYCBgLnRpZmZgIGAucG5nYCBgLmJtcGAgYC5zdmdgIGAud21mYA0KYGBge3J9DQpnZ3NhdmUoZmlsZT0icGxvdDEuanBnIikNCmdnc2F2ZShmaWxlPSJwbG90MS5wbmciKQ0KZ2dzYXZlKGZpbGU9InBsb3QxLnBkZiIpDQpgYGANCnBsb3QgZGlzaW1wYW4gZGFsYW0gdWt1cmFuIGRlZmF1bHRueWEuDQoNCi0gICBNZW55aW1wYW4gZ3JhZmlrIGRhbGFtIHVrdXJhbiB5YW5nIGRpdGVudHVrYW4NCmBgYHtyfQ0KZ2dzYXZlKGZpbGU9InBsb3QyLmpwZyIsIHNjYWxlID0gMikNCmdnc2F2ZShmaWxlPSJwbG90My5qcGciLCB3aWR0aCA9IDUsIGhlaWdodCA9IDUsIHVuaXRzID0gImluIikNCmBgYA0K