Pada pertemuan kedua ini, akan diilustrasikan visualisasi data menggunakan ggplot2. Sebagai ilustrasi, akan digunakan data mtcars yang tersedia pada package dplyr. Paket yang perlu diinstal: install.packages(“dplyr”) install.packages(“ggplot2”)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.5 ✓ purrr 0.3.4
## ✓ tibble 3.1.0 ✓ dplyr 1.0.6
## ✓ tidyr 1.1.3 ✓ stringr 1.4.0
## ✓ readr 1.4.0 ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
## 'data.frame': 32 obs. of 11 variables:
## $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
## $ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
## $ disp: num 160 160 108 258 360 ...
## $ hp : num 110 110 93 110 175 105 245 62 95 123 ...
## $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
## $ wt : num 2.62 2.88 2.32 3.21 3.44 ...
## $ qsec: num 16.5 17 18.6 19.4 17 ...
## $ vs : num 0 0 1 1 0 1 0 1 1 1 ...
## $ am : num 1 1 1 0 0 0 0 0 0 0 ...
## $ gear: num 4 4 4 3 3 3 3 4 4 4 ...
## $ carb: num 4 4 1 1 2 1 4 2 2 4 ...
Untuk melihat deskripsi dari data tersebut, dapat digunakan fungsi help().
help(mtcars)
Deskripsi Mtcars Dataset
Penjelasan untuk masing-masing peubah yang ada pada dataset mtcars (Motor Trend Car Road Tests adalah sebagai berikut: Data diambil dari majalah Motor Trend US 1974, dan terdiri dari konsumsi bahan bakar dan 10 aspek desain dan kinerja mobil untuk 32 mobil (model 1973-1974). Data terdiri dari 32 observasi dan 11 variabel.
Andaikan kita ingin mengetahui banyaknya masing-masing jumlah gigi, maka kita dapat menampilkannya menggunakan barplot berikut:
ggplot(data = mtcars) +
geom_bar(mapping=aes(x=carb))
Pada umumnya, barplot ditampilkan secara terurut dari frekuensi yang paling besar. Sehingga kita dapat mengurutkan kelas berdasarkan frekuensi dnegan menggunakan Sebagai tambahan, kita dapat pula memberikan warna pada plot dengan menambahkan argumen fill, serta warna border setiap bar dengan argumen color, seperti contoh berikut ini.
mtcars$carb=as.factor(mtcars$carb)
mtcars %>%
count(carb) %>%
mutate(carb = fct_reorder(carb, n, .desc = TRUE)) %>%
ggplot(aes(x = carb, y = n, fill=carb)) + geom_bar(stat = 'identity')
Untuk melihat hubungan antar peubah, dapat dilakukan dengan menggunakan barchart sebagai berikut:
library(ggplot2)
ggplot(mtcars, aes(am, fill =carb )) + geom_bar()+
labs(title = "Plot Hubungan Peubah Karburator dan Transmisi", borders())
Barplot digunakan untuk menyajikan data kategorik. Untuk data numerik, terdapat cukup banyak jenis visualisasi yang dapat digunakan untuk menampilkan nilai data, di antaranya adalah dotplot, histogram, density plot, dsb.
ggplot(mtcars, aes(x = carb)) +
geom_dotplot(dotsize=0.4) +
scale_y_continuous(NULL, breaks = NULL) +
labs(x="Highway Miles per Gallon")
## Bin width defaults to 1/30 of the range of the data. Pick better value with `binwidth`.
# install.packages("vioplot")
library("vioplot")
## Loading required package: sm
## Package 'sm', version 2.2-5.7: type help(sm) for summary information
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
mpg1 <- mtcars$mpg
vioplot(mpg1)
vioplot(mpg1,
col = 4, # Color of the area
rectCol = "tomato4", # Color of the rectangle
lineCol = "white", # Color of the line
colMed = "green", # Pch symbol color
border = "black", # Color of the border of the violin
pchMed = 16, # Pch symbol for the median
plotCentre = "points") # If "line", plots a median line
ggplot(mtcars, aes(x=carb, y=wt))+
geom_violin()
Menambahkan argumen judul, sub judul, dan caption pada violine plot:
g <- ggplot(mtcars, aes(carb, wt))
g + geom_violin() +
labs(title="Violin plot",
subtitle="Karburator vs Bentuk Mesin",
caption="Source: mtcars",
x="Kelas Karburator",
y="Bentuk Mesin")
Menambahkan warna pada violin plot:
ggplot(mtcars, aes(x=carb, y=wt))+
geom_violin(fill="tomato3")
ggplot(mtcars, aes(x=carb, y=wt, fill=carb))+
geom_violin()
Pada violin plot, kita dapat memilih untuk tidak melakukan pemangkasan data dengan menambahkan argumen trim=FALSE
ggplot(mtcars, aes(x=carb, y=wt, fill=carb))+
geom_violin(trim=FALSE)
Menambahkan mean dan median pada violin plot dapat dilakukan sebagai berikut:
# Adding Mean & Median
ggplot(mtcars, aes(x = carb, y = wt, fill = carb)) +
geom_violin() + scale_y_log10() +
stat_summary(fun.y = "mean", geom = "point", shape = 8, size = 3, color = "midnightblue") +
stat_summary(fun.y = "median", geom = "point", shape = 2, size = 3, color = "red")
## Warning: `fun.y` is deprecated. Use `fun` instead.
## Warning: `fun.y` is deprecated. Use `fun` instead.
## Warning: Groups with fewer than two data points have been dropped.
## Warning: Groups with fewer than two data points have been dropped.
Menambahkan boxplot pada violin plot:
library(ggplot2)
ggplot(mtcars, aes(x = carb, y = wt, fill = carb)) +
geom_violin() +
geom_boxplot(width = 0.1)
Pada violin plot kita juga dapat mengubah posisi legend dari sebelah kanan ke atas. Sementara untuk menghilangkan legend juga dapat dilakukan dengan menggunakan argumen
legend.position = “none”
ggplot(mtcars, aes(x = carb, y = wt, fill = carb)) +
geom_violin() +
geom_boxplot(width = 0.2) +
theme(legend.position = "top")
Mengubah posisi violin plot menjadi horisontal:
library(ggplot2)
ggplot(mtcars, aes(x = carb, y = wt, fill = carb)) +
geom_violin() +
geom_boxplot(width = 0.2) +
coord_flip()
## Warning: Groups with fewer than two data points have been dropped.
## Warning: Groups with fewer than two data points have been dropped.
Pada kasus tertentu, kita perlu menyajikan grafik dari beberapa peubah untuk menyampaikan informasi tentang komposisi tertentu. Beberapa pendekatan dapat digunakan, di antaranya adalah stacked bar plot, stacked hitogram, pyramid, dsb.
Misalnya, kita ingin menampilkan jenis-jenis karburator pada berbagai jenis mesin. Pertama, kita dapat menggunakan stacked bar chart seperti pada contoh berikut ini.
## Scale for 'fill' is already present. Adding another scale for 'fill', which
## will replace the existing scale.
Cara lain yang dapat digunakan untuk menampilkan stacked bar adalah menggunakan segmented bar.
library(scales)
##
## Attaching package: 'scales'
## The following object is masked from 'package:purrr':
##
## discard
## The following object is masked from 'package:readr':
##
## col_factor
# create a summary dataset (data manipulation)
plotdata <- mtcars %>%
group_by(carb, vs) %>%
dplyr::summarize(n = n()) %>%
mutate(pct = n/sum(n),
lbl = scales::percent(pct))
## `summarise()` has grouped output by 'carb'. You can override using the `.groups` argument.
# create segmented bar chart
# adding labels to each segmen
ggplot(plotdata,
aes(x = factor(carb),
y = pct,
fill = factor(vs))) +
geom_bar(stat = "identity",
position = "fill") +
scale_y_continuous(breaks = seq(0, 1, .2),
label = percent)+
geom_text(aes(label = lbl),
size = 3,
position = position_stack(vjust = 0.5)) +
scale_fill_brewer(palette = "Set2") +
scale_fill_discrete(name = "Karburator", labels = c("1", "2", "3","4","6","8")) +
theme_minimal() + # use a minimal theme
labs(y = "Percent",
fill = "Karburator",
x = "Karburator",
title = "Jenis Karburator pada Mesin") +
theme_minimal()
## Scale for 'fill' is already present. Adding another scale for 'fill', which
## will replace the existing scale.
ggplot(data=mtcars, aes(x=wt, group=carb, fill=carb)) +
geom_density(adjust=0.5, position="fill", adjust=1.5, alpha=.2)
mtcars %>%
ggplot(aes(x=mpg,y=hp)) +
geom_point(size = 3, colour = "black") +
geom_segment( aes(x=mpg, xend=mpg, y=0, yend=hp))+
labs(y= "Tenaga Motor", x="Mile/Gallon")
#DataViz : Plot the lollipop chart
ggplot(mtcars, aes(x=mpg,y=hp)) +
geom_point(size = 6, colour = "red") +
geom_segment(aes(x=mpg, xend=mpg, y=0, yend=hp))+
geom_label(aes(mpg, hp+1, label = signif(hp,3)),
colour = "blue", nudge_x = 0.3, size = 2)+
labs(title="Perbandingan Jumlah Gallon/mil dan Tenaga Motor", y= "Tenaga Motor", x="Mile/Gallon") +
theme(axis.text.x = element_text(angle=60, vjust=0.6, color="black"))