Package ggplot2 merupakan salah satu package untuk visualisasi yang sudah diakui oleh sebagian besar pengguna R sebagai package terbaik untuk pembuatan visualisasi statis. Tahap awal yang harus dilakukan untuk melakukan visualisasi adalah dengan mengaktifkan package, atau melakukan instalasi package jika Anda belum menginstall package.
install.packages('ggplot2')
library(ggplot2)Tiga hal yang harus dimiliki untuk melakukan visualisasi menggunakan ggplot2.
Data
Fungsi ggplot() dan mendefinisikan aesthetic mapping (menentukan peubah yang akan digunakan)
Bentuk geometri pada package ggplot2 yang disingkat dengan geom
Salah satu data yang digunakan pada praktikum yaitu data house_price.
data_house=read.csv("https://raw.githubusercontent.com/gerrydito/Sains-Data-S2/master/Praktikum/Visualisasi%20Data/house_price.csv", header = TRUE, sep=",")library(grid)
vp.layout <- function(x, y) viewport(layout.pos.row=x, layout.pos.col=y)
arrange <- function(..., nrow=NULL, ncol=NULL, as.table=FALSE) {
dots <- list(...)
n <- length(dots)
if(is.null(nrow) & is.null(ncol)) { nrow = floor(n/2) ; ncol = ceiling(n/nrow)}
if(is.null(nrow)) { nrow = ceiling(n/ncol)}
if(is.null(ncol)) { ncol = ceiling(n/nrow)}
## NOTE see n2mfrow in grDevices for possible alternative
grid.newpage()
pushViewport(viewport(layout=grid.layout(nrow,ncol) ) )
ii.p <- 1
for(ii.row in seq(1, nrow)){
ii.table.row <- ii.row
if(as.table) {ii.table.row <- nrow - ii.table.row + 1}
for(ii.col in seq(1, ncol)){
ii.table <- ii.p
if(ii.p > n) break
print(dots[[ii.table]], vp=vp.layout(ii.table.row, ii.col))
ii.p <- ii.p + 1
}
}
}
sketsa1 = ggplot(data= data_house)
sketsa2 = ggplot(data= data_house, aes(x= bedrooms, y = price))
arrange(sketsa1,sketsa2)Hasil tampilan abu-abu polos grafik sebelah kiri diperoleh karena kita belum menentuka peubah yang akan digunakan. Sementara itu, grafik sebelah kanan adalah hasil saat kita telah mendefinisikan peubah yang akan digunakan.
Notes: fungsi arrange digunakan untuk mengatur layout. Fungsi tersebut dibuat oleh Stephen Turner.
Langkah selanjutnya adalah menentukan jenis visualisasi yang akan digunakan. Misalkan kita ingin membuat visualisasi menggunakan scatter plot, maka kita dapat menggunakan fungsi geom_point(). Pada ggplot, jika kita ingin menambahkan fungsi geom atau layer lainnya, kita cukup menggunakan tanda “+”. Sehingga, akan diperoleh hasil sebagai berikut.
grafik1 = ggplot(data= data_house, aes(x= bedrooms, y = price))+geom_point()
grafik2 = ggplot(data= data_house)+geom_point(aes(x= bedrooms, y = price))
arrange(grafik1,grafik2)Untuk mempercantik tampilan grafik, kita dapat menambahkan opsi color didalam aes, baik pada ggplot ataupun geom_point(). Selanjutnya, opsi size dapat ditambahkan untuk mengatur ukuran titik. Selain itu, jika kita juga dapat menambahkan fungsi labs() untuk menambahkan judul dan mengubah judul pada sumbu x dan sumbu y. Fungsi theme_light() digunakan untuk mengubah tampilan visualisai. Berikut adalah hasilnya.
ggplot(data= data_house)+geom_point(aes(x= bedrooms, y = price, color = as.character(condition)))+ labs(title = 'Scatter Plot Price vs Bedrooms', x = 'Bedrooms', y = 'Price', color = "Condition")+
theme_light()Beberapa fungsi geometri yang ada pada ggplot:
geom_point(), plot tebaran
geom_bar(), diagram batang dari data mentah individu
geom_col(), diagram batang dari data agregate
geom_histogram(), histogram
geom_density, kurva kepekatan peluang
geom_boxplot, diagram kotak garis
geom_violin, diagram violin
geom_line(), diagram garis
Berikut adalah beberapa fungsi yang dapat digunakan untuk modifikasi tampilan visualisasi dengan ggplot2
theme(), mengatur tema sesuai yang diinginkan
theme_light(), mengganti background menjadi warna putih
element_text(), menambahkan text pada bagian tertentu
scale_fill_manual(), mengubah warna bagian dalam geom secara manual
scale_fill_gradient(), mengubah warna gradasi secara manual
Misalkan kita ingin menampilkan jumlah rumah berdasarkan kondisi.
ggplot(data= data_house, aes(x = condition)) + geom_bar(stat = 'count',fill = 'skyblue') + labs(x = 'Kondisi Rumah', y = 'Jumlah Rumah', title = 'Jumlah Rumah di Setiap Kondisi')Misalkan kita henda menampilkan rata-rata harga rumah di setiap kota. Hal pertama yang akan dilakukan yaitu mempersiapkan data. Berikut adalah syntax R nya
data_price = aggregate(data_house$price, by = list(data_house$city), FUN = mean)
head(data_price)## Group.1 x
## 1 Algona 207288.0
## 2 Auburn 299340.4
## 3 Beaux Arts Village 745000.0
## 4 Bellevue 847180.7
## 5 Black Diamond 339605.6
## 6 Bothell 481441.9
ggplot(data= data_price, aes(x = reorder(Group.1, x), y = x))+ geom_point(color = "navyblue", size = 4, alpha = 0.6) + geom_segment(aes(x = reorder(Group.1, x),xend = reorder(Group.1, x), y = 0, yend = x))+labs(x = "City", y = "Price Average") +coord_flip() Selanjutnya, misalkan saja kita ingin melihat sebaran dari harga rumah
ggplot(data_house) +
geom_histogram(aes(x = price),col="navyblue",binwidth = 5000) +
ggtitle("Histogram Harga Rumah") +
labs(x= "Price") +
theme(plot.title = element_text(hjust = 0.5)) + theme_light()Misalkan kita ingin melihat perbandingan sebaran harga rumah dari beberapa kota.
library(dplyr)##
## Attaching package: 'dplyr'
## The following object is masked _by_ '.GlobalEnv':
##
## arrange
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
data_house%>%
filter(city %in% c("Shoreline","Seattle"
,"Auburn","Duvall","Burien",
"Tukwila","Vashon","Yarrow Point",
"SeaTac","Medina")
)%>%
ggplot() +
geom_boxplot(aes(x = city,y = price,fill=city),show.legend = F) +
ggtitle("Sebaran Harga Rumah Setiap Kota") +
ylab("Price") +
xlab("City") +
theme(plot.title = element_text(hjust = 0.5))+
theme_light() + coord_flip()Berdasarkan boxplot diatas, terlihat bahwa kota Medina adalah kota dengan harga rumah yang lebih mahal dibandingkan kota lainnnya.
Sama seperti pada kasus sebelumnya, misalkan kita ingin melihat perbandingan sebaran harga rumah dari beberapa kota. Density plot akan menampilkan kurva dugaan dari dugaan fungsi kepekatan peluang dari peubah yang dianalisis.
library(ggridges)
data_house%>%
filter(city %in% c("Shoreline","Seattle"
,"Auburn","Duvall","Burien",
"Tukwila","Vashon","Yarrow Point",
"SeaTac","Medina")
)%>%
ggplot() +
geom_density_ridges(aes(y = city,x = price,fill=city), show.legend = F) +
ggtitle("Sebaran Harga Rumah Setiap Kota") +
ylab("City") +
xlab("Price") +
theme(plot.title = element_text(hjust = 0.5))+
theme_bw()## Picking joint bandwidth of 133000
Berdasarkan boxplot diatas, terlihat bahwa kota Medina adalah kota dengan harga rumah yang lebih mahal dibandingkan kota lainnnya.
Pada subbab ini data yang akan digunakan adalah data mpg yang merupakan data bawaan dari R
data(mpg)
car_data = mpg
names(car_data)## [1] "manufacturer" "model" "displ" "year" "cyl"
## [6] "trans" "drv" "cty" "hwy" "fl"
## [11] "class"
Scatter plot digunakan untuk melihat pola hubungan antara dua peubah numerik. Misalkan saja kita ingin melihat pola hubungan antara peubah cty dan displ.
ggplot(data= car_data)+geom_point(aes(x= displ, y = cty), color = "navyblue", size =4)+ labs(x = 'displ', y = 'cty')+ ggtitle("Scatter Plot Price vs Bedrooms")+
theme_light()Selanjutnya, misal ingin dilihat pola hubungan antara peubah cty dan displ berdasarkan peubah fl (fuel type), maka dapat dibuat program sebagai berikut:
ggplot(data= car_data)+geom_point(aes(x= displ, y = cty,color = fl ), size =4)+ labs(x = 'displ', y = 'cty')+ ggtitle("Scatter Plot Price vs Bedrooms")+
theme_light()Correlogram merupakan teknik visualisasi yang membuat grafik berdasarkan nilai koefisien korelasi yang dikonversikan dalam bentuk warna. Visualisasi ini biasa digunakan jika kita hendak melihat korelasi dari beberapa peubah numerik.
Misalkan dalam kasus ini, kita ingin melihat korelasi antara peubah numerik pada data mobil (car_data) dana data rumah (data_house), maka kita dapat menggunakan syntax sebagai berikut.
korelasi_car = GGally::ggcorr(car_data, method = c("everything","pearson"),geom = "tile") + ggtitle("Korelasi Antar Peubah Numerik Data Mobil")## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
## Warning in GGally::ggcorr(car_data, method = c("everything", "pearson"), : data
## in column(s) 'manufacturer', 'model', 'trans', 'drv', 'fl', 'class' are not
## numeric and were ignored
korelasi_rumah = GGally::ggcorr(data_house, method = c("everything","pearson"),geom = "tile") + ggtitle("Korelasi Antar Peubah Numerik Data Rumah")## Warning in GGally::ggcorr(data_house, method = c("everything", "pearson"), :
## data in column(s) 'date', 'street', 'city', 'statezip', 'country' are not
## numeric and were ignored
arrange(korelasi_car, korelasi_rumah)Time series plot digunakan untuk menampilkan grafik pergerakan suatu peubah dari waktu ke waktu. Pada subbab ini, kita akan menggunakan data buatan untuk mengilustrasikan pembuatan time series plot, baik pada data deret waktu tunggal ataupun jamak. Berikut adalah program R nya.
df1 <- data.frame(date = as.Date("2021-01-01") - 0:99,
sales = rnorm(100, 1100, 30), city = "Jakarta")
df2 <- data.frame(date = as.Date("2021-01-01") - 0:99,
sales = rnorm(100, 1000, 20), city= "Bogor")
head(df1)## date sales city
## 1 2021-01-01 1120.030 Jakarta
## 2 2020-12-31 1067.724 Jakarta
## 3 2020-12-30 1097.771 Jakarta
## 4 2020-12-29 1096.651 Jakarta
## 5 2020-12-28 1127.667 Jakarta
## 6 2020-12-27 1105.582 Jakarta
head(df2)## date sales city
## 1 2021-01-01 1023.5541 Bogor
## 2 2020-12-31 1041.3989 Bogor
## 3 2020-12-30 982.7239 Bogor
## 4 2020-12-29 988.7830 Bogor
## 5 2020-12-28 1005.8038 Bogor
## 6 2020-12-27 990.1469 Bogor
#Menampilkan time series plot df1
ggplot(df1, aes(x=date, y=sales)) +
geom_line() + geom_point()#Menampilkan time series plot df1 df2
data_gab = rbind(df1,df2)
ggplot(data_gab, aes(x=date, y=sales, color = city)) +
geom_line() + geom_point()Sartono B, Hidayatulloh A. 2021. Visualisasi Data yang Efektif. (ID): IPB Press
anonym . tanpa tahun .qplot: Quick plot with ggplot2 - R software and data visualization (8 Februari 2022). http://www.sthda.com/english/wiki/qplot-quick-plot-with-ggplot2-r-software-and-data-visualization
Chang W. 2013. R Graphic Cookbook. California : O’Really Media. http://www.cookbook-r.com/
de Vries A, Meys J. tanpa tahun. How to Get Geoms in ggplot in R (8 Februari 2022 ). https://www.dummies.com/programming/r/how-to-get-geoms-in-ggplot-in-r/
Dito GA, Anisa R. 2020. Visualisasi Data dengan ggplot2. (18 Februari 2022).https://rpubs.com/gdito/viz-ggplot2
Lilis D. tanpa tahun .R Graphics: Plotting in Color with qplot Part 2 (8 Februari 2022). https://www.theanalysisfactor.com/r-programming-plotting-color-part-2-qplot/
RStudio . tanpa tahun . Data Visualization with ggplot2 Cheat Sheet (8 Februari 2022). https://rstudio.com/wp-content/uploads/2015/03/ggplot2-cheatsheet.pdf
Turner S. 2010. Arrange multiple ggplot2 plots in the same image window (8 Februari 2022). https://gettinggeneticsdone.blogspot.com/2010/03/arrange-multiple-ggplot2-plots-in-same.html
Wickham H, Danielle N, Pedersen TL. 2016. ggplot2: Elegant Graphics for Data Analysis. Texas: Springer. https://ggplot2-book.org/