Algoritma & Struktur Data
Visualisasi Data
| Kontak | : \(\downarrow\) |
| clara.evania@student.matanauniversity.ac.id | |
| https://www.instagram.com/claraevania/ | |
| RPubs | https://rpubs.com/claradellaevania/ |
Visualisasi Data merupakan suatu teknik pengambilan informasi melalui data kedalam konteks visual,contohnya adalah bagan, grafik, dan peta. Dengan memvisualisasi data dapat membuat data kecil maupun besar lebih mudah dipahami oleh manusia terlebih akan lebih menguasai mendeteksi pola, tren, dan outlier.
Univariat (Satu Variabel)
Biasanya Visualisasi Satu Variabel digunakan dengan tujuan melakukan distribusi data dari satu variabel, yaitu:
- Kategoris
- Jenis Kelamin , Ras , Negara , Kota, Dll
- Numerik
- Usia, Berat Badan, Inflasi, Suku Bunga, Dll
Variabel Kategori
Biasanya,data pada suatu variabel kategori tunggal didistribusikan lalu diplot menggunakan diagram batang, diagram lingkaran ataupun diagram pohon
Diagram Batang
Dalam menampilkan distribusi peserta pernikahan berdasarkan zodiak,dapat menggunakan diagram batang.
library(ggplot2) # untuk visualisasi
DataMarriage<- read.csv("https://raw.githubusercontent.com/Bakti-Siregar/dataset/master/Bookdown-Data-Science-for-Beginners/Marriage.csv") # Memuat data dari PC
ggplot(DataMarriage, aes(x = zodiacs)) + # Membuat Plot distribusi dari `Zodiak`
geom_bar(fill = "cornflowerblue",
color= "azure4") + # Untuk Mengganti warna
theme_minimal() + # Dengan menggunakan Tema minimal
labs(x = "Zodiak", # Dapat mengganti Label dan Judul Plot
y = "Frekuensi",
title = "Peserta Pernikahan Menurut Zodiak")Presentase dari jumlah dalam plot digambarkan dengan Batang berwarna Biru. Untuk dapat menghitung presentase dalam diagram Batang, dapat menggunakan kode aes(x=sign, y=...count...). Count sebagai variabel yang menggambarkan frekuensi dari setiap kategori.
library(ggplot2) # Sebagai Visualisasi
ggplot(DataMarriage,
aes(x = zodiacs,
y = ..count.. / sum(..count..))) +
geom_bar(fill = rainbow(12), color= "azure4") +
theme_minimal() + # Dengan Menggunakan Tema Minimal
labs(x = "Zodiak",
y = "Persen",
title = "Peserta Pernikahan Menurut Zodiak") +
scale_y_continuous(labels = scales::percent) # Dengan Menambahkan simbol % untuk label sumbu YCatatan: Dalam R, warna dapat ditentukan dengan nama. Misalnya col="green" atau menggunakan triplet RGB Heksadesimal, seperti col = "#FFCC00".
Untuk dapat melihat suatu diagram dengan mudah, kita bisa mengurutkan batang berdasarkan frekuensinya dengan menggunakan fungsi reoder. Lalu untuk memberitahu fungsi plot agar tidak menghitung jumlah dapat menggunakan stat="identity
library(dplyr) # Untuk Memanipulasi Data
library(ggplot2) # Untuk Visualisasi Data
plot_data <- DataMarriage %>% # Untuk Memuat dataset
count(zodiacs) # Menghitung Jumlah Peserta pada setiap 'Zodiacs'
# Membuat Plot batang secara meningkat
ggplot(plot_data,
aes(x = reorder(zodiacs, n),
y = n)) +
geom_bar(stat = "identity",
fill = rainbow(12),
color= "azure4") +
theme_minimal() + # Menggunakan Tema Minimal
labs(x = "Zodiak",
y = "Frekuensi",
title = "Mengurutkan Kategori")Lalu jika ingin memberikan label pada batang dapat menggunakan :
library(dplyr) # Untuk Memanipulasi Data
library(ggplot2) # Untuk Visualisasi Data
library(scales) # Untuk Menentukan Jeda atau Label secara Otomatis
plotdata1 <- DataMarriage %>%
count(zodiacs) %>%
mutate(pct = n / sum(n),
pctlabel = paste0(round(pct*100), "%"))
# Plot Batang sebagai Persentasi, dalam urutannya menurun dengan label Batang
ggplot(plotdata1,
aes(x = reorder(zodiacs, -pct),
y = pct)) +
geom_bar(stat = "identity",
fill = rainbow(12),
color = "azure4") +
geom_text(aes(label = pctlabel),
vjust = -0.25) +
theme_minimal() + # Menggunakan Tema Minimal
scale_y_continuous(labels = percent) +
labs(x = "Zodiak",
y = "Frekuensi",
title = "Label Pada Batang")Selain itu, kita dapat memutar label sumbu dengan cara:
library(ggplot2) # Untuk Visualisasi Data
library(scales) # Untuk Menentukan Jeda atau Label secara Otomatis
# Membuat Plot Batang sebagai Presentasi, dalam urutan menurun dengan label batang
ggplot(plotdata1,
aes(x = reorder(zodiacs, -pct),
y = pct)) +
geom_bar(stat = "identity",
fill = rainbow(12),
color = "azure4") +
geom_text(aes(label = pctlabel),
vjust = -0.25) +
scale_y_continuous(labels = percent) +
theme_minimal() + # Menggunakan Tema Minimal
labs(x = "Zodiak",
y = "Persen",
title = "Memutar Labels")+
theme(axis.text.x = element_text(angle = 45, hjust = 1))Selain itu, juga dapat membalik sumbu x dan y dengan cara:
library(ggplot2) # Untuk Visualisasi Data
library(scales) # Untuk Menentukan Jeda atau Label secara Otomatis
# Membuat Plot Batang sebagai Presentasi, dalam urutan menurun dengan label batang
ggplot(plotdata1,
aes(x = reorder(zodiacs, -pct),
y = pct)) +
geom_bar(stat = "identity",
fill = rainbow(12),
color = "azure4") +
geom_text(aes(label = pctlabel),
hjust = -0.10) +
scale_y_continuous(labels = percent) +
theme_minimal() + # Menggunakan Tema Mnimal
labs(x = "Zodiak",
y = "Persen",
title = "Memutar Labels")+
coord_flip()Diagram Pai
Diagram Batang digunakan dalam membandingkan frekuensi dari kategori. Diafram Pai digunakan untuk membandingkan setiap kategori secara menyeluruh (porsi partisipant dibanding semua partisipant) dengan jumlah kategorinya kecil.
library(dplyr) # Untuk Memanipulasi Data
library(ggplot2) # Untuk Visualisasi Data
library(scales) # Untuk Menentukan Jeda atau Label secara Otomatis
# Mempersiapkan Data
plot1data <- DataMarriage %>%
count(race) %>%
arrange(desc(race)) %>%
mutate(prop = round(n*100/sum(n), 1),
lab.ypos = cumsum(prop) - 0.5*prop)
# Membuat Diagram Pai
colours <- c("#0073C2FF", "#EFC000FF", "#868686FF", "#CD534CFF")
ggplot(plot1data, aes(x = "", y = prop, fill = race)) +
geom_bar(width = 1, stat = "identity", color = "white") +
coord_polar("y", start = 0)+
geom_text(aes(y = lab.ypos, label = prop), color = "white")+
scale_fill_manual(values = colours) +
theme_void()+
labs(title = "
Peserta Pernikahan Berdasarkan Ras")Untuk membuat Lubang di dalam Diagram Pai, dapat menetapkan x = 2 dan xlim = c(0.5, 2.5).
library(ggplot2) # Untuk Visualisasi Data
library(scales) # Untuk Menentukan Jeda atau Label secara Otomatis
# Membuat Diagram Donat
ggplot(plot1data, aes(x = 2, y = prop, fill = race)) +
geom_bar(stat = "identity", color = "white") +
coord_polar(theta = "y", start = 0)+
geom_text(aes(y = lab.ypos, label = prop), color = "white")+
scale_fill_manual(values = colours) +
theme_void()+
xlim(0.5, 2.5)+
labs(title = "Peserta Pernikahan Berdasarkan Ras")Selanjutnya untuk menambah Label dapat menggunakan:
library(ggplot2) # Untuk Visualisasi Data
library(scales) # Untuk Menentukan Jeda atau Label secara Otomatis
# Menambahkan Label Persen
plot1data$percent <- paste0(plot1data$race, "\n",
round(plot1data$prop), "%")
# Membuat Diagram Donat Dalam Persen
ggplot(plot1data, aes(x = 2, y = prop, fill = race)) +
geom_bar(stat = "identity", color = "white") +
coord_polar(theta = "y", start = 0)+
geom_text(aes(y = lab.ypos, label = percent), color = "white")+
scale_fill_manual(values = colours) +
theme_void()+
xlim(0.5, 2.5)+
labs(title = "Peserta Pernikahan Berdasarkan Ras")Peta Pohon
Peta Pohon dapat menangani Variabel Kategorial yang memiliki banyak tingkatan
library(ggplot2) # Untuk Visualisasi Data
library(treemapify) # Untuk Visualisasi Data
library(scales) # Untuk Menentukan Jeda atau Label secara Otomatis
plotdata2 <- DataMarriage %>%
count(officialTitle)
ggplot(plotdata2,
aes(fill = officialTitle,
area = n)) +
geom_treemap() +
labs(title = "Peserta Pernikahan Menurut Pejabat")Jika ditambahkan Label akan seperti :
ggplot(plotdata2,
aes(fill = officialTitle,
area = n,
label = officialTitle)) +
geom_treemap() +
geom_treemap_text(colour = "white",
place = "centre") +
labs(title = "Peserta Pernikahan Menurut Pejabat") +
theme(legend.position = "none")Variabel Kontinu
Biasanya, Distribusi Variabel Kuantitatif tunggal di plot menggunakan histogram, plor densitas kernel atau plot titik.
Histogram
Membuat Plot Usia dari Peserta Pernikahan menggunakan dataset Mariagge
library(ggplot2) # Untuk Visualisasi Data
ggplot(DataMarriage, aes(x = age)) +
geom_histogram(fill = "cornflowerblue",
color = "white",bins = 20) +
theme_minimal() + # Menggunakan Tema Minimal
labs(title="Peserta Pernikahan berdasarkan usia ",
x = "Umur")Warna pada Histogram dapat diganti dengan cara:
- Fill
- Warna Isi Untuk Batang
- Color
- Warna Batas disekitar Batang
Cara Lainnya adalah menggunakan binwidth
library(ggplot2) # Untuk Visualisasi Data
library(scales) # Untuk Menentukan Jeda atau Label secara Otomatis
ggplot(DataMarriage,
aes(x = age,
y= ..count.. / sum(..count..))) +
geom_histogram(fill = "cornflowerblue",
color = "white",
binwidth = 5) +
theme_minimal() + # Menggunakan Tema Minimal
labs(title="
Peserta Pernikahan Berdasarkan Usia (Alternative Bins and bandwidths)",
y = "Persen",
x = "Umur") +
scale_y_continuous(labels = percent)Sumbu y dapat mewakili jumlah atau persen dari total.
library(ggplot2) # Untuk Visualisasi Data
library(scales) # Untuk Menentukan Jeda atau Label secara Otomatis
ggplot(DataMarriage,
aes(x = age,
y= ..count.. / sum(..count..))) +
geom_histogram(fill = "cornflowerblue",
color = "white",
binwidth = 5) +
theme_minimal() + # Menggunakan Tema Minimal
labs(title="Peserta Pernikahan Berdasarkan Usia (Persen)",
y = "Persen",
x = "Umur") +
scale_y_continuous(labels = percent)Plot Densitas Kernel
Plot Densitas Kernel merupakan sebuah alternatif dalam histogram. Perkiraan Densitas Kernel secara teknis adalah metode Non-Parametrik. Dimana untuk memperkirakan fungsi densitas probabilitas dari variabel acak kontinu.
library(ggplot2) # Untuk Visualisasi
ggplot(DataMarriage, aes(x = age)) +
geom_density(fill = "indianred3") +
theme_minimal() + # Menggunakan Tema Minimal
labs(title = "Peserta Pernikahan Berdasarkan Usia")Grafik ini menunjukkan distribusi skor. Contohnya Proposi kasus antara 20 dan 40 tahun diwakili oleh luas dibawah kurva antara 20 dan 40 pada sumbu x.
Parameter Penghalusan (Smoothing)
Bandwidth wd untuk mengontrol tingkat kehalusan. Maka dari itu kita bisa menggunakan fungsi bw.nrd0 untuk menemukan nilai default dalam variabel tertentu.
Nilai yang Lebih Besar = Penghalusan yang lebih Banyak. Nilai yang Lebih Kecil = Penghalusan yang lebih Sedikit.
library(ggplot2) # Untuk Visualisasi
bw.nrd0(DataMarriage$age) # Unruk Default bandwidth untuk variabel Usia## [1] 5.181946
ggplot(DataMarriage, aes(x = age)) +
geom_density(fill = "deepskyblue",
bw = 1) +
theme_minimal() + # Menggunakan Tema Manual
labs(title = "Peserta Berdasarkan Umur",
subtitle = "bandwidth = 1")Dengan Plot Densitas Kernel akan memudahkan kita melihat skor yang paling sering atau yang relatif jarang.
Diagram Titik
Selain Plot Densitas Karel, alternatif lain untuk histogram adalah Diagram Titik. Setiap Pengamatan ditentukan oleh sebuah titik, dimana lebar dari sebuah titik sama dengan lebar bin, lalu titik tersebut bertumpuk dan setiap titik tersebut mewakili satu pengamatan. Untuk Menentukan warna isian dan batasan pada masing-masing titik, dapat menggunakan fill dan color.
library(ggplot2) # Untuk Visualisasi
ggplot(DataMarriage, aes(x = age)) +
geom_dotplot(fill = "gold",
color = "azure4",
binwidth = 2) +
theme_minimal() + # Menggunakan Tema Minimal
labs(title = "Peserta Berdasarkan Umur",
y = "Proporsisi",
x = "Umur")Data Bivariat
Jenis Grafik bergantung kepada tingkat pengukuran dari variabel, dapat dikatakan kategori maupun kuantitatif. Grafik Bivarat menunjukkan hubungan antara 2 variabel.
Kategorikal VS Kategorikal
Diagram Batang Bertumpuk
Membuat Plot hubungan antara kelas mobil dan jenis penggerak.
library(ggplot2) # Untuk Visualisasi
mpg$drv<-factor(mpg$drv,
levels = c("f", "r", "4"),
labels = c("front-wheel", "rear-wheel", "4-wheel"))
# Diagram Batang Bertumpuk
ggplot(mpg,
aes(x = class,
fill = drv)) +
geom_bar(position = "fill") +
theme_minimal() + # Mengguanakan Tema Minimal
labs(y = "Proportion")Diagram Batang yang Dikelompokkan
Dalam membuat plot Batang yang dikelompokkan, dapat menggunakan Position = "Single".
library(ggplot2) # Untuk Visualisasi
ggplot(mpg, aes(x = class, fill = drv)) +
theme_minimal() + # Menggunakan Tema Minimal
geom_bar(position = position_dodge(preserve = "single"))Diagram Batang Tersegmentasi
Dalam membuat diagram batang tersegmentasi, kita dapat menggunakan opsi position = "filled". Plot Batang bertumpuk dimana setiap batang memiliki 100 persen dengan tujuan membandingkan presentase kategori dalam satu variabel pada tingkat variabel lain.
library(dplyr) # Untuk Manipulasi Data
library(ggplot2) # Untuk Visualisasi
library(scales) # Untuk Menentukan Label secara otomatis
# Membuat ringkasan dataset (manipulasi data)
plotdata <- mpg %>%
group_by(class, drv) %>%
dplyr::summarize(n = n()) %>%
mutate(pct = n/sum(n),
lbl = scales::percent(pct))
# Membuat Diagram Batang tersegmentasi dan Menambahkan Label untuk setiap segmen
ggplot(plotdata,
aes(x = factor(class),
y = pct,
fill = factor(drv))) +
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") +
theme_minimal() + # Menggunakan Tema Minimal
labs(y = "Percent",
fill = "Drive Train",
x = "Class",
title = "Automobile Drive by Class") +
theme_minimal()Catatan: Dapat Menggunakan opsi dalam meningkatkan warna dan pelabelan seperti:
- Factor mengubah urutan dari kategori ke variabel kelas dan urutan. Lalu labels digunakan dalam variabel drive.
- scale_y_continuous untuk mengubah label pada tanda centang di sumbu Y.
- labs Menyediakan maupun mengubah judul dan label untuk sumbu x dan y.
- scale_fill_brewer untuk mengubah skema yang ada pada warna isian.
- theme_minimal untuk menghapus latar belakang abu-abu dan mengubah warnanya.
Plot Mosaik
Diagram Mosaik menggunakan persegi panjang dimana luasnya mewaikili proporsi kejadian dalam kombinasi level tertentu untuk menampilkan hubungan antara variabel kategorikal.
Menggunakan package vcd untuk memberikan suatu pendekatan yang lebih komprehensif dalam memvisualisasikan data kategorikal. Kodenya adalah:
# Membuat Tabel
tbl <- xtabs(Freq ~ Survived +Class + Sex, Titanic)
ftable(tbl)## Sex Male Female
## Survived Class
## No 1st 118 4
## 2nd 154 13
## 3rd 422 106
## Crew 670 3
## Yes 1st 62 141
## 2nd 25 93
## 3rd 88 90
## Crew 192 20
# Membuat Plot Mosaik dari Tabel
library(vcd)
mosaic(tbl, main = "Data Titanic")Ukuran Ubin setara dengan persentase kasus dalam kombinasi tingkatnya. Jika berasumsi bahwa ketiga variabel tidak bergantung, kita perlu memeriksa residual dan memberi bayangan agar lebih sesuai.
mosaic(tbl,
shade = TRUE,
legend = TRUE,
labeling_args = list(set_varnames = c(Sex = "Gender",
Survived = "Survived",
Class = "Passenger Class")),
set_labels = list(Survived = c("No", "Yes"),
Class = c("1st", "2nd", "3rd", "Crew"),
Sex = c("F", "M")),
main = "Data Titanic")Warna Biru Gelap = lebih banyak kasus dari yang diharapkan tidak terikat Warana Merah Tua = lebih sedikit kasus dari yang diharapkan jika berlaku tidak terikat.
Class, Gender, dan Survival tidak terikat, karena banyak crew laki yang tewas, namun perempuan kelas 1,2, dan 3 bertahan dibandingkan yang diharapkan.
Kontinu VS Kontinu
Merupakan hubungan antara 2 variabel yang ditampilkan menggunakan plot sebaran dan grafik garis
Plot Sebaran
Plot Sebaran digunakan dalam mempelajari hubungan antara 2 variabel dimana disertai perhtungan koefisien korelasi untuk mengukur hubungan linear. Beberapa pola yang dapat dideteksi dengan menggunakan plot sebaran adalah:
library(ggplot2) # Untuk Visualisasi Data
library(hrbrthemes) # Untuk Tema ' Theme_ipsum()` dan legend
# Membuat Data
data1 <- data.frame(x=seq(1,100),
y=rnorm(100),
name="No trend")
data2 <- data1 %>%
mutate(y=x*10 + rnorm(100,sd=60)) %>%
mutate(name="Linear relationship")
data3 <- data1 %>%
mutate(y=x^2 + rnorm(100,sd=140)) %>%
mutate(name="Square")
data4 <- data.frame( x=seq(1,10,0.1),
y=sin(seq(1,10,0.1)) +
rnorm(91,sd=0.6)) %>%
mutate(name="Sin")
don <- do.call(rbind, list(data1, data2, data3, data4))
# Plot
don %>%
ggplot(aes(x=x, y=y)) +
geom_point(color="#69b3a2", alpha=0.8) +
theme_ipsum() +
facet_wrap(~name, scale="free")Plot Sebaran merupakan tampilan yang paling sederhana dari 2 variabel kuantitatif. Dalam menggunakan dataset Salaries, dapat membuat plot pengalaman(yrs.since.phd) vs Gaji Akademik (salary).
library(ggplot2) # Untuk Visualisasi Data
library(scales) # Menentukan Jeda atau label secara otomatis
data(Salaries, package="carData")
# Meningkatkan Plot Sebaran
ggplot(Salaries,
aes(x = yrs.since.phd,
y = salary)) +
geom_point(color="cornflowerblue",
size = 2,
alpha=.8) +
scale_y_continuous(label = scales::dollar,
limits = c(50000, 250000)) +
scale_x_continuous(breaks = seq(0, 60, 10),
limits=c(0, 60)) +
theme_minimal() + # Menggunakan Tema Minimal
labs(x = "Years Since PhD",
y = "",
title = "Experience vs. Salary",
subtitle = "9-month salary for 2008-2009")Catatan: Fungsi geom_point dapat mengubah:
- Color
- Warna Titik
- Size
- Ukuran Titik
- Ukuran Titik
- Shape
- Bentuk Titik
- Alpha
- Transparasi Titik
Kita dapat mengontrol skala pada sumbu x dan y dalam membuat plot sebaran yang lebih menarik dengan menggunakan fungsi scale_x_continuos dan scale_y_continuous.
Plot Sebaran Menyesuaikan Garis
Plot Sebaran Menyesuaikan Garis sangat berguna dalam meringkas hubungan dengan plot sebaran menggunakan sebuah garis yang menyesuaikan. Garis yang ditampilkan dengan batas kepercayaan 95%.
library(ggplot2) # Untuk Visualisasi Data
ggplot(Salaries,
aes(x = yrs.since.phd,
y = salary)) +
geom_point(color= "cornflowerblue") +
geom_smooth(method = "lm", color = "brown1")+
theme_minimal() + # Menggunakan Tema Minimal
labs(x = "Years Since PhD",
y = "",
title = "Experience vs. Salary",
subtitle = "9-month salary for 2008-2009")Terdapat penurunan gaji pada ujung kanan-profesor dimana mendapatkan gaji lebih rendah. Garis lurus tidak dapat merangkap efek non-linear ini. Garis Regresi Polinomial memberikan garis pas dengan bentuk:
\(\hat y =β_0 +β_1x+β_2x^2+...+β_nx^2\)
Kita dapat menerapkan kesesuaian kuadrat kedata set gaji dengan menghasilkan hasil:
library(ggplot2) # Untuk Visualisasi Data
ggplot(Salaries,
aes(x = yrs.since.phd,
y = salary)) +
geom_point(color= "cornflowerblue") +
geom_smooth(method = "lm",
formula = y ~ poly(x, 2),
color = "yellow")+
theme_minimal() + # Menggunakan Tema Minimal
labs(x = "Years Since PhD",
y = "",
title = "Experience vs. Salary",
subtitle = "9-month salary for 2008-2009")Dapat memberikan gambaran tentang suatu hubungan melalui garis kesuaian nonparametrik yang diperhalus.
library(ggplot2) # Untuk Visualisasi
ggplot(Salaries,
aes(x = yrs.since.phd,
y = salary)) +
geom_point(color="cornflowerblue",
size = 2,
alpha = 1) +
geom_smooth(size = 1,
color = "green") +
scale_y_continuous(label = scales::dollar,
limits = c(50000, 250000)) +
scale_x_continuous(breaks = seq(0, 60, 10),
limits = c(0, 60)) +
theme_minimal() + # Menggunakan Tema Minimal
labs(x = "Years Since PhD",
y = "",
title = "Experience vs. Salary",
subtitle = "9-month salary for 2008-2009") +
theme_minimal()Kategorikal VS Kontinu
Terdapat banyak jenis grafik, dimana ini termasuk diagram batang yang menggunakan ringkasan statistik, plot densitas kernel, plot kotak berdampingan, dll.
Diagram Batang (Ringkasan Statistik)
Diagram Batang diguanakan untuk menampilkan ringkasan statistik seperti mean, median pada variabel kuantitatif dalam setiap tingkatan pada variabel kategorikal.
Contoh Grafik Gaji Rata-Rata dalam sampel profesor Universitas berdasarkan Jabatan Akademik.
library(dplyr) # Untuk Manipulasi Data
library(ggplot2) # Untuk Visualisasi Data
library(scales) # Menentukan jeda ataupun label secara otomatis
data(Salaries, package="carData")
# Menghitung Gaji Rata-Rata pada setiap Jabatan
plotdata <- Salaries %>%
group_by(rank) %>%
dplyr::summarize(mean_salary = mean(salary))
# Membuat Plot Gaji Rata-Rata (lebih menarik)
mycols <- c("#CD534CFF", "#EFC000FF", "#0073C2FF")
ggplot(plotdata,
aes(x = factor(rank,
labels = c("Assistant\nProfessor",
"Associate\nProfessor",
"Full\nProfessor")),
y = mean_salary)) +
geom_bar(stat = "identity",
fill = mycols) +
geom_text(aes(label = dollar(mean_salary)),
vjust = -0.25) +
scale_y_continuous(breaks = seq(0, 130000, 20000),
label = dollar) +
theme_minimal() + # Menggunakan Tema Minimal
labs(title = "Mean Salary by Rank",
subtitle = "9-month academic salary for 2008-2009",
x = "",
y = "")Plot Densitas Kernel yang Dikelompokkan
Membuat Plot distribusi Gaji berdasarkan Jabatan dengan menggunakan Plot Densitas Kernel.
ggplot(Salaries,
aes(x = salary,
fill = rank)) +
geom_density(alpha = 0.4) +
theme_minimal() +
labs(title = "Salary distribution by rank")Dengan menggunakan fungsi alpha, kita dapat melihat sesuatu yang terjadi dibagian yang tumpang tindih. Nilainya berkisar 0(transparan) hingga 1 (buram). Dalam Grafik tersebutm Gaji meningkat sesuai Jabatan, namun kisaran gaji untuk full profesor sangat luas
Boxplot
Boxplot atau Plot Kotak dapat menampikan persentil ke-25, median, dan persentil ke-75 dari sebuah distribusi. Garis Vertikal menangkap 99% dari distribusi normal, lalu memplotkan pengamatan diluar kisaran sebagai titik yang mewaikili pencilan.
Boxplot
Plot Kotak atau Boxplot berdampingan berguna dalam membandingkan kelompok pada Variabel Numerik.
Membuat Plot distribusi Gaji berdasarkan Jabatan menggunakan plot Kotak
mycols <- c("#CD534CFF", "#EFC000FF", "#0073C2FF")
ggplot(Salaries, aes(x = rank,
y = salary)) +
geom_boxplot(notch = TRUE,
fill = mycols,
alpha = .7) +
theme_minimal() +
labs(title = "Salary Distribution by rank")Kita bisa menggunakannya untuk membandingkan distribusi dari banyak kelompok dalam satu grafik
Plot Biola
Plot Biola sangat mirip dengan Plot Densitas Kernel, hanya saja dicerminkan dan diputar 90°. Menggunakan Plot Biola kita akan membuat plot distribusi Gaji berdasarkan Jabatan
ggplot(Salaries,
aes(x = rank,
y = salary)) +
geom_violin(fill = "azure1") +
geom_boxplot(width = .2,
fill = mycols,
outlier.color = "red",
outlier.size = 2) +
theme_minimal() +
labs(title = "Salary distribution by rank")Plot Garis Punggung
Plot ini menampilkan distribusi variabel kuantitatif dalam beberapa kelompok. Plot ini dibuat dengan package ggridges.
Membuat Plot Mil Perjalanan kota per galon menurut kelas mobil dengan menggunakan data set Fuel Economy.
library(dplyr) # Untuk Manipulasi Data
library(ggplot2) # Untuk Visualisasi Data
library(ggridges) # Untuk Mengendalikan Visualisasi yang tumpang tindih
ggplot(mpg,
aes(x = cty,
y = class,
fill = class)) +
geom_density_ridges(alpha = 0.7) +
theme_ridges() +
labs("Highway mileage by auto class") +
theme(legend.position = "none")Truk Pickup memiliki jarak yang paling rendah, sementara mobil subcompact dan compact mencapai peringkat.Tetapi, terdapat rentang skor jarak tempuh yang luas untuk mobil kecil. Kita dapat menambahkan transparansi jika tumpang tindihnya sangat parah dengan menggunakan geom_density_ridges(alpha = n)
Plot Garis
Akan Ploy Taya-Rata dan Kesalahan standar dengan membuat teknik yang sama terhadap membandingkan gaji jabatan dan jenis kelamin.
library(dplyr) # Untuk Manipulasi Data
library(ggplot2) # Untuk Visualisasi Data
library(ggridges) # Untuk Mengendalikan Visualisasi yang tumpang tindih
# Akan Menghitung Rata2, SD, Kesalahan Standar dan 95% interval Kepervayaan berdasarkan jabatan
plot0_data <- Salaries %>%
group_by(rank, sex) %>%
dplyr::summarize(n = n(),
mean = mean(salary),
sd = sd(salary),
se = sd/sqrt(n),
ci = qt(0.975, df = n - 1) * sd / sqrt(n))
# improved means/standard error plot
pd <- position_dodge(0.2)
ggplot(plot0_data,
aes(x = factor(rank,
labels = c("Assistant\nProfessor",
"Associate\nProfessor",
"Full\nProfessor")),
y = mean,
group=sex,
color=sex)) +
geom_point(position=pd,
size = 3) +
geom_line(position = pd,
size = 1) +
geom_errorbar(aes(ymin = mean - se,
ymax = mean + se),
width = .1,
position = pd,
size = 1) +
scale_y_continuous(label = scales::dollar) +
scale_color_brewer(palette="Set1") +
theme_minimal() +
labs(title = "Mean salary by rank and sex",
subtitle = "(mean +/- standard error)",
x = "",
y = "",
color = "Gender")Plot Strip
Plot Sebaran dapat menampilkan hubungan antara variabel pengelompokkan dan variabel numerik dimana plot sebar satu dimensi disebut plot strip. Hubungannya dengan lebih mudah dilihat jika titik-titiknya goyah. Untuk memudahkan membandingkan Kelompok dapat menggunakan warna.
library(ggplot2) # Untuk Visualisasi
library(scales) # Penskalaan Infrastruktur
ggplot(Salaries,
aes(y = factor(rank,
labels = c("Assistant\nProfessor",
"Associate\nProfessor",
"Full\nProfessor")),
x = salary,
color = rank)) +
geom_jitter(alpha = 0.7,
size = 1.5) +
scale_x_continuous(label = dollar) +
labs(title = "Academic Salary by Rank",
subtitle = "9-month salary for 2008-2009",
x = "",
y = "") +
theme_minimal() +
theme(legend.position = "none")Untuk Menyembunyikan legend, kita dapat menggunakan opsi legend.position="none". Jika Jumlah dari Titik-titik tidak terlalu besar, plot jitter bekerja dengan baik.
Menggabungkan Jitter dan Plot Kotak
Dalam Memvisualisasikan Distribusi, kita dapat menambahkan beberapa pilihan dibawah ini untuk menambahkan plot kotak ke plot jitter
- Untuk Plot Kotak
- size = 1 membuat garis menjadi lebih tebal
- outlier.color = black membuat pencilan berwarna hitam
- outlier.shape = 1 menentukan lingkaran untuk pencilan
- outlier.size = 3 meningkatkan ukuran dari pencilan
- Untuk Jitter
- alpha = 0.5 menmbuat titik menjadi lebih transparan.
- width = 2 mengurangi jumlah jitter (default=4)
Kita dapat membalik sumbu x dan y dengan menggunakan fungsi coord_flip.
library(ggplot2) # Untuk Visualisasi
library(scales) # Penskalaan Infrastruktur
ggplot(Salaries,
aes(x = factor(rank,
labels = c("Assistant\nProfessor",
"Associate\nProfessor",
"Full\nProfessor")),
y = salary,
color = rank)) +
geom_boxplot(size=1,
outlier.shape = 1,
outlier.color = "black",
outlier.size = 3) +
geom_jitter(alpha = 0.5,
width=.2) +
scale_y_continuous(label = dollar) +
labs(title = "Academic Salary by Rank",
subtitle = "9-month salary for 2008-2009",
x = "",
y = "") +
theme_minimal() +
theme(legend.position = "none") +
coord_flip()Dalam membuat plot kotak hibrida-setengah plot kotak setengah plot sebaran kita dapat menggunakan fungsi geom_boxjitter yang tersedia dalam package ggpol.
library(ggplot2) # Untuk Visualisasi
library(scales) # Penskalaan Infrastruktur
library(ggpol) # Plot Kotak Hibrida-Setengah Plot sebaran
ggplot(Salaries,
aes(x = factor(rank,
labels = c("Assistant\nProfessor",
"Associate\nProfessor",
"Full\nProfessor")),
y = salary,
fill=rank)) +
geom_boxjitter(color="black",
jitter.color = "darkgrey",
errorbar.draw = TRUE) +
scale_y_continuous(label = dollar) +
labs(title = "Academic Salary by Rank",
subtitle = "9-month salary for 2008-2009",
x = "",
y = "") +
theme_minimal() +
theme(legend.position = "none")Plot Kawanan Lebah
Plot ini juga mirip dengan plot sebaran Biola dan Plot sebaran Jitter dimana akan menampilkan distribusi dari variabel kuantitatif dengan cara memplot titik-titik dengan mengurangi tumpang tindih.
library(ggplot2) # Untuk Visualisasi
library(scales) # Penskalaan Infrastruktur
library(ggbeeswarm) # Mengurangi Tumpang Tindih
ggplot(Salaries,
aes(x = factor(rank,
labels = c("Assistant\nProfessor",
"Associate\nProfessor",
"Full\nProfessor")),
y = salary,
color = rank)) +
geom_quasirandom(alpha = 0.7,
size = 1.5) +
scale_y_continuous(label = dollar) +
labs(title = "Academic Salary by Rank",
subtitle = "9-month salary for 2008-2009",
x = "",
y = "") +
theme_minimal() +
theme(legend.position = "none")Diagram Titik Cleveland
Plot Cleveland digunakan untuk membandingkan statistik numerik dalam jumlah kelompok yang besar, dengan menggunakan data set gapminder.
library(dplyr) # Untuk Manipulasi Data
library(ggplot2) # Untuk Visualisasi
library(scales) # Penskalaan Infrastruktur
library(ggbeeswarm) # Mengurangi Tumpang Tindih
library(gapminder) # Untuk dataset `gapminder`
data(gapminder, package="gapminder") # Memuat dataset `gapminder`
# Mensubset negara-negara ASIAN tahun 2007
library(dplyr)
plotdata <- gapminder %>%
filter(continent == "Asia" &
year == 2007)
# Fancy Cleveland plot
ggplot(plotdata,
aes(x=lifeExp,
y=reorder(country, lifeExp))) +
geom_point(color="blue",
size = 2) +
geom_segment(aes(x = 40,
xend = lifeExp,
y = reorder(country, lifeExp),
yend = reorder(country, lifeExp)),
color = "azure3") +
labs (x = "Life Expectancy (years)",
y = "",
title = "Life Expectancy by Country",
subtitle = "GapMinder data for Asia - 2007") +
theme_minimal() +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank())Didapatkan, Jepang memiliki angka harapan hidup yang tertinggi, dibandingkan Afghanistan yang memiliki angka harapan hidup paling rendah.
Data Multivariat
Grafik Multivariat menampilkan hubungan antara tiga variabel ataupun lebih. 2 metode umum dalam menampung Variabel adalah Pengelompokkan dan Faceting.
Pengelompokkan
Nilai dari 2 Variabel dipetakan pada sumbu x dan y lalu variabel tambaha dipetakan ke karakteristik visual (warna,bentuk,ukuran,jenis,garis,dan transparansi). Kita dapat menampilkan hubungan antara yrs.since.phd dan salary, dengan menggunakan data set Salaries
library(carData) # Untuk dataset
library(ggplot2) # Untuk Visualisasi
data(Salaries, package="carData")
ggplot(Salaries, aes(x = yrs.since.phd,
y = salary,
color=rank)) +
geom_point() +
theme_minimal() +
labs(title = "Academic salary by rank and years since degree")Menambahkan Jenis Kelamin Profesor menggunakan bentuk titik dalam menunjukkan jenis kelamin, dimana akna meningkatkan ukuran titik dan menambahkan transparasi untuk memperjelas titik individual.
library(carData) # Untuk dataset
library(ggplot2) # Untuk Visualisasi
ggplot(Salaries,
aes(x = yrs.since.phd,
y = salary,
color = rank,
shape = sex)) +
geom_point(size = 3, alpha = .6) +
theme_minimal() +
labs(title = "Academic salary by rank, sex, and years since degree") Perbedaan antara menentukan nilai konstan (size=3) dan pemetaan variabel dalam karakteristik visual (color=rank). Pemetaan ditempatkan dalam fungsi
aes, sedangkan penetapan nilai konstanta selalu muncul diluar fungsi aes.
Membuat Grafik Hubungan Antar tahun sejak Ph.D. dan gaju menggunakan ukuran dari titik dalam menunjukkan masa kerja yang disebut plot gelembung.
library(carData) # Untuk dataset
library(ggplot2) # Untuk Visualisasi
ggplot(Salaries,
aes(x = yrs.since.phd,
y = salary,
color = rank,
size = yrs.service)) +
geom_point(alpha = .8) +
theme_minimal() +
labs(title = "Academic salary by rank, years of service, and years since degree")Terdapat Hubungan yang baik dan kuat antara Tahun-Tahun sejak Ph.D. dan Tahun layanan. Tidak ditemukan batasan waktu yang sama antara Associate dan Full Professors.
library(carData) # Untuk dataset
library(ggplot2) # Untuk Visualisasi
ggplot(Salaries,
aes(x = yrs.since.phd,
y = salary,
color = sex)) +
geom_point(alpha = .4,
size = 3) +
geom_smooth(se=FALSE,
method = "lm",
formula = y~poly(x,2),
size = 1.5) +
labs(x = "Years Since Ph.D.",
title = "Academic Salary by Sex and Years Experience",
subtitle = "9-month salary for 2008-2009",
y = "",
color = "Sex") +
scale_y_continuous(label = scales::dollar) +
scale_color_brewer(palette = "Set1") +
theme_minimal()Faceting ( Pembagian Faset)
Dengan Pengelompokkan, akan memplot beberapa variabel dalam satu grafik. Dimana semua itu menggunakan karakteristik visual(warna, bentuk, dan ukuran). Grafik terdiri dari beberapa plot-plot yang terpisah ataupun kelipatan kecil, satu untuk setiap tingkatan dari variabel ketiga ataupun kombinasi variabel dimana semua itu termasuk pembagian faset.
library(carData) # Untuk dataset
library(ggplot2) # Untuk Visualisasi
ggplot(Salaries, aes(x = salary)) +
geom_histogram(fill = "cornflowerblue",
color = "white") +
facet_wrap(~rank, ncol = 1) +
theme_minimal() +
labs(title = "Salary histograms by rank")Dalam membuat grafik terpisah pada setiap tingkat jabatan dapat menggunakan Fungsi facet_wrap. Jika mengatur jumlah kolom dapat menggunakan fungsi ncol.
Kita akan menggunakan 2 variabel dalam mendefinisikan faset, dimana fungsi menetapkan jenis kelamin ke baris dan jabatan ke kolom, membuat matriks enam plot dalam satu grafik.
library(carData) # Untuk dataset
library(ggplot2) # Untuk Visualisasi
ggplot(Salaries, aes(x = salary / 1000)) +
geom_histogram(color = "white",
fill = "cornflowerblue") +
facet_grid(sex ~ rank) +
theme_minimal() +
labs(title = "Salary histograms by sex and rank",
x = "Salary ($1000)")Selain itu, dalam membandingkan gaji-gaji dari profesor pria dan wanita dalam jabatan dan disiplin ilmu, kita dapat menggunakan Plot Mean/SE dan Pembagian Faset.
Untuk membedakan Jenis kelamin dan pembagian faset dalam membuat plot jabatan berdasarkan kombinasi displin ilmu, kita dapatmenggunakan warna.
library(carData) # Untuk dataset
library(ggplot2) # Untuk Visualisasi
library(dplyr) #Untuk Manipulasi Data
# Menghitung Rata2 dan kesalahan Standar berdasarkan Jenis Kelamin, jabatan dan disiplin ilmu
plotdata <- Salaries %>%
group_by(sex, rank, discipline) %>%
dplyr::summarize(n = n(),
mean = mean(salary),
sd = sd(salary),
se = sd / sqrt(n))
# Membuat Label yang baik untuk disiplin ilmu
plotdata$discipline <- factor(plotdata$discipline,
labels = c("Theoretical",
"Applied"))
# membuat Plot
ggplot(plotdata,
aes(x = sex,
y = mean,
color = sex)) +
geom_point(size = 3) +
geom_errorbar(aes(ymin = mean - se,
ymax = mean + se),
width = .1) +
scale_y_continuous(breaks = seq(70000, 140000, 10000),
label = scales::dollar) +
facet_grid(. ~ rank + discipline) +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.y = element_blank()) +
labs(x="",
y="",
title="Nine month academic salaries by gender, discipline, and rank",
subtitle = "(Means and standard errors)") +
scale_color_brewer(palette="Set1")Fungsi Theme() membuat tema hitam dan putih serta menghilangkan garis grid vertikal maupun garis grid horizontal minor Fungsi scale_color_brewer() dapat mengubah skema warna untuk titik dan batang-batang kesalahan.
Selanjutnya, menggunakan dataset baru dan memplot perubahan dalam harapan hidup dari waktu ke waktu di negara-negara “ASIA”. Dimana data-data tersebut berasal dari gapminder yang terletak dalam package gapminder. Dalam menyederhanakan warna latar belakang, memutar teks sumbu x, dan memperkecil ukuran tulisan, kita dapat menggunakan fungsi tema.
library(carData) # Untuk dataset
library(ggplot2) # Untuk Visualisasi
library(dplyr) #Untuk Manipulasi Data
# Membuat Plot harapan hidup berdasarkan tahun secara terpisah dalam setiap negara di Asia
data(gapminder, package = "gapminder")
# Memilih data ASIA
plotdata <- dplyr::filter(gapminder,
continent == "Asia")
# Membuat Plot Harapan Hidup berdasarkan Tahun, untuk setiap negara
ggplot(plotdata, aes(x=year, y = lifeExp)) +
geom_line(color="grey") +
geom_point(color="blue") +
facet_wrap(~country) +
theme_minimal(base_size = 9) +
theme(axis.text.x = element_text(angle = 45,
hjust = 1)) +
labs(title = "Changes in Life Expectancy",
x = "Year",
y = "Life Expectancy")