Email          : e7ilsaudi@gmail.com
RPubs         : https://rpubs.com/jeremyheriyandi23/
Jurusan      : Statistika
Address     : ARA Center, Matana University Tower
             Jl. CBD Barat Kav, RT.1, Curug Sangereng, Kelapa Dua, Tangerang, Banten 15810.
Visualisasi data adalah teknik mengambil informasi dari data ke dalam konteks visual, seperti bagan, grafik, dan peta. Visualisasi data membuat data besar dan kecil lebih mudah dipahami oleh otak manusia, dan visualisasi juga membuatnya lebih andal untuk mendeteksi pola, tren, dan outlier dalam kelompok data.
R dan Python adalah platform luar biasa untuk analisis data, yang mampu membuat hampir semua jenis grafik. Pada kesempatan ini, materi yang akan dibahas adalah ragam visualisasi yang paling populer dalam data science, dari plot paling sederhana hingga grafik siap publikasi. Secara spesifik akan fokus pada teknik visualisasi data Univariat, Bivariat, dan Multivariat.
Catatan: Pada pertemuan kali ini kita akan fokus pada visualisasi data dengan R
Visualisasi data univariat biasanya digunakan untuk melakukan distribusi data dari satu variabel. Dalam hal ini, variabel yang dimaksud dipartisi menjadi dua bagian:
Distribusi pada suatu variabel kategori tunggal biasanya diplot dengan diagram batang, diagram lingkaran, atau diagram pohon (tetapi ini sangat jarang sekali).
Berikut ini adalah contoh yang menunjukkan frekuensi dari dataset ’‘’Marriage’’‘, Saya mendapatkannya dari package’‘’mosaicData’’‘. Kita gunakan diagram batang untuk menampilkan distribusi peserta pernikahan berdasarkan’‘’Zodiak’’’.
library(ggplot2) # untuk visualisasi data## Warning: package 'ggplot2' was built under R version 4.1.2
# setwd("C:/Users/e7ils/Downloads/tugas 13") # untuk men-setting working directory
Marriage <- read.csv("https://raw.githubusercontent.com/Bakti-Siregar/dataset/master/Bookdown-Data-Science-for-Beginners/Marriage.csv") # Memuat data dari PC anda
ggplot(Marriage, aes(x = zodiacs)) +
geom_bar(fill = "cornflowerblue",
color = "azure4") +
theme_minimal() + # menggunakan tema minimal
labs(x = "Zodiacs",
y = "Frequency",
title = "Marriage Participants by Zodiacs")Batang pada diagram batang dapat menggambarkan persentase dari jumlah. Untuk diagram batang (zodiak), kode aes(x=sign) biasanya merupakan jalan pintas untuk aes(x = sign, y =..count..), di mana ..count.. adalah variabel khusus yang menggambarkan frekuensi dari setiap kategori. Anda dapat menggunakan ini untuk menghitung persentase, dengan menentukan variabel y secara eksplisit.
library(ggplot2) # untuk visualisasi data
ggplot(Marriage,
aes(x = zodiacs,
y = ..count.. / sum(..count..))) +
geom_bar(fill = rainbow(12), color = "azure4") +
theme_minimal() + # menggunakan tema minimal
labs(x = "Zodiacs",
y = "Frequency",
title = "Marriage Participants by Zodiacs") +
scale_y_continuous(labels = scales::percent) # menambahkan simbol % pada sumbu yCatatan: Dalam R, warna bisa kita tentukan dengan memanggil nama (misalnya col= "red" ) atau dengan triplet RGB heksadesimal (seperti col = "AFFCC00" ). Kita juga dapat memanggil warna lain nya seperti salah satunya diambil dari package RColorBrewer.
Mengurutkan batang berdasarkan frekuensi sering kali membantu. Kode di bawah ini, frekuensi dihitung secara eksplisit. Kemudian fungsi reorder berdasarkan frekuensinya. Opsi stat="identity" memberitahu fungsi plot untuk tidak menghitung digunakan untuk mengurutkan kategori jumlah, karena mereka diberikan secara langsung.
library(dplyr) # untuk manipulasi data##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2) # untuk visualisasi data
plotdata <- Marriage %>% # memuat dataset
count(zodiacs)
# menyusun plot batang secara meningkat
ggplot(plotdata,
aes(x = reorder(zodiacs, n),
y = n)) +
geom_bar(stat = "identity",
fill = rainbow(12),
color = "azure4") +
theme_minimal() + # menggunakan tema minimal
labs(x = "Zodiacs",
y = "Frequency",
title = "Sorting Categories") Mari kita berikan label setiap batang dengan nilai numerik nya, dengan mengikuti kode di bawah ini :
library(dplyr) # untuk manipulasi data
library(ggplot2) # untuk visualisasi data
library(scales) # menentukan jeda atau label secara otomatis## Warning: package 'scales' was built under R version 4.1.2
plotdata <- Marriage %>% # memuat dataset
count(zodiacs) %>%
mutate(pct = n / sum (n),
pctlabel = paste0(round(pct*100), "%"))
# plot batang sebagai presentase, dalam urutan menurun dengan label batang
ggplot(plotdata,
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) + # menambahkan simbol % pada sumbu y
labs(x = "Zodiacs",
y = "Frequency",
title = "Labeling Bars") Terkadang label kategori (seperti tulisan nama-nama zodiak) saling menumpuk, itu terkadang menyusahkan untuk membacanya. Maka dari itu, ayo kita miringkan tulisan yang tertulis pada label sumbu
x!
library(ggplot2) # untuk visualisasi data
library(scales) # menentukan jeda atau label secara otomatis
# memplot batang sebagai presentase, dalam urutan menurun dengan label batang
ggplot(plotdata,
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) + # menambahkan simbol % pada sumbu y
theme_minimal() + # menggunakan tema minimal
labs(x = "Zodiacs",
y = "Frequency",
title = "Overlapping Labels") +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) Cara lainnya, kita dapat membalik sumbu
x dan sumbu y.
library(ggplot2) # untuk visualisasi data
library(scales) # menentukan jeda atau label secara otomatis
# memplot batang sebagai presentase, dalam urutan menurun dengan label batang
ggplot(plotdata,
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) + # menambahkan simbol % pada sumbu y
theme_minimal() + # menggunakan tema minimal
labs(x = "Zodiacs",
y = "Frequency",
title = "Overlapping Labels") +
coord_flip() ### Diagram Pie Diagram pai bersifat kontroversial di statistik. Jika tujuan Anda adalah untuk membandingkan frekuensi dari kategori, lebih baik Anda menggunakan diagram batang (orang-orang lebih baik dalam menilai panjang batang dari pada volume irisan lingkaran). Karena dibutuhkan lebih banyak kode untuk membuat diagram pai agar lebih menarik dalam R.
Dibawah ini adalah contoh untuk membuat diagram pai sederhana dengan menggunakan library ggplot2:
library(dplyr)
library(ggplot2)
library(scales)
# Persiapan Data
plotdata <- Marriage %>%
count(race) %>%
arrange(desc(race)) %>%
mutate(prop = round(n*100/sum(n), 1),
lab.ypos = cumsum(prop) - 0.5*prop)
# Membuat Diagram Pai
mycols <- c("#0073C2FF", "#EFC000FF", "#868686FF", "#CD534CFF")
ggplot(plotdata, 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 = mycols) +
theme_void()+
labs(title = "Marriage Participants by Race")
Diagram Donat termasuk bagian Diagram Pai dengan bentuk yang sederhana dengan lubang di tengahnya. Perbedaan antara kode diagram pai adalah dengan menetapkan : x = 2 dan xlim = c(0.5, 2.5) untuk membuat lubang di tengah diagram pai. Argumen widht dalam fungsi geom_bar tidak diperlukan dalam membuat diagram donat.
library(ggplot2)
library(scales)
# Membuat Diagram Donat
ggplot(plotdata, 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 = mycols) +
theme_void()+
xlim(0.5, 2.5)+
labs(title = "Marriage participants by Race")Sekarang mari kita kreasikan diagram pie ini dengan menambahkan label, sambil menghapus legend.
library(ggplot2) # Untuk visualisasi
library(scales) # Untuk menentukan jeda atau label secara otomatis
# Tambahkan Label Persen
plotdata$percent <- paste0(plotdata$race, "\n",
round(plotdata$prop), "%")
# Membuat Diagram Donat dalam Persen
ggplot(plotdata, 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 = mycols) +
theme_void()+
xlim(0.5, 2.5)+
labs(title = "Marriage participants by Race") ### Peta Pohon Peta Pohon tidak seperti Diagram Pai ataupun Diagram Donat, karena Peta Pohon dapat menangani variabel yang memiliki banyak tingkatan.
library(ggplot2)
library(treemapify)## Warning: package 'treemapify' was built under R version 4.1.2
library(scales)
plotdata <- Marriage %>%
count(officialTitle)
ggplot(plotdata,
aes(fill = officialTitle,
area = n)) +
geom_treemap() +
labs(title = "Marriage Participants by Officiate")
Dibawah ini adalah versi yang lebih lengkap dengan label.
ggplot(plotdata,
aes(fill = officialTitle,
area = n,
label = officialTitle)) +
geom_treemap() +
geom_treemap_text(colour = "white",
place = "centre") +
labs(title = "Marriage Participants by Officiate") +
theme(legend.position = "none")Distribusi variabel data kuantitatif tunggal biasanya dibuat menggunakan plot dengan histogram, plot densitas kernel, atau plot titik.
Dengan menggunakan dataset Marriage, mari kita plot usia dari orang yang sebagai peserta pernikahan.
library(ggplot2) # Untuk visualisasi
ggplot(Marriage, aes(x = age)) +
geom_histogram(fill = "cornflowerblue",
color = "white", bins = 20) +
theme_minimal() + # Menggunakan tema minimal
labs(title = "Marriage Participants by Age (Basic)",
x = "Age") Sebagian besar orang yang menikah berada di range usia 20-an tahun, selanjutnya di range usia 40-an tahun, dan yang terkecil di range usia 60-an dan 70-an tahun. Warna histogram dapat diganti warna dengan dua opsi, antara lain :
* fill = untuk mewarnai isi batang.
* color = untuk mewarnai batas sekitar batang.
Cara lain yang terakhir adalah menggunakan binwidth, lebar nampan yang diwakili oleh batang.
library(ggplot2) # Untuk visualisasi
library(scales) # Untuk menentukan jeda atau label secara otomatis
ggplot(Marriage,
aes(x = age,
y = ..count.. / sum(..count..))) +
geom_histogram(fill = "cornflowerblue",
color = "white",
binwidth = 5) +
theme_minimal() + # Menggunakan tema minimal
labs(title = "Marriage Participants by Age (Alternative)",
y = "Percent",
x = "Age") +
scale_y_continuous(labels = percent) Seperti Diagram Batang (yang diawal), sumbu y itu adalah perwakilan jumlah atau persen dari total.
library(ggplot2) # Untuk visualisasi
library(scales) # Untuk menentukan jeda atau label secara otomatis
ggplot(Marriage,
aes(x = age,
y = ..count.. / sum(..count..))) +
geom_histogram(fill = "cornflowerblue",
color = "white",
binwidth = 5) +
theme_minimal() + # Menggunakan tema minimal
labs(title = "Marriage Participants by Age (Percent)",
y = "Percent",
x = "Age") +
scale_y_continuous(labels = percent)Histogram memiliki alternatif yaitu plot densitas kernel. Plot densitas kernel ini hanya menggambar histogram yang diperhalus, dimana area dibawah kurva sama dengan satu.
library(ggplot2) # Untuk visualisasi
ggplot(Marriage, aes(x = age)) +
geom_density(fill = "indianred3") +
theme_minimal() + # Menggunakan tema minimal
labs(title = "Marriage Participants by Age")Kita dapat menggunakan fill dan color untuk menentukan warna isian dan warna pinggiran batasannya.
Tingkat kehalusan di kontrol oleh parameter bandwidth atau bw. Kita dapat menggunakan fungsi bw.nrd0 untuk menemukan nilai default dari variabel tertentu. Nilai yang kecil akan menghasilkan penghalusan yang sedikit, sedangkan nilai yang besar akan menghasilkan penghalusan yang lebih banyak.
library(ggplot2) # Untuk visualisasi
bw.nrd0(Marriage$age) # Default bandwidth untuk variabel usia ## [1] 5.181946
ggplot(Marriage, aes(x = age)) +
geom_density(fill = "deepskyblue",
bw = 1) +
theme_minimal() + # Menggunakan tema minimal
labs(title = "Participants by Age",
subtitle = "bandwidth = 1")Histogram memiliki alternatif lain yaitu diagram titik. Lebar dari sebuah titik sama dengan lebar bin, dan titik-titik bertumpuk, dengan setiap titik mewakili satu pengamatan. Option fill dan color digunakan untuk menentukan warna isian dan pinggir batasan masing-masing titik.
library(ggplot2) # Untuk visualisasi
ggplot(Marriage, aes(x = age)) +
geom_dotplot(fill = "gold",
color = "azure4",
binwidth = 2) +
theme_minimal() + # Menggunakan tema minimal
labs(title = "Participants by Age",
y = "Proportion",
x = "Age") Ada lebih banyak pilihan yang tersedia. Klik di sini untuk detail dan contoh.
Grafik Bivariat berguna untuk menunjukkan hubungan antara dua variabel. Jenis grafik yang akan dipakai juga tergantung dengan tingkat pengukuran dari variabel (Kategorikan atau Kuantitatif).
library(ggplot2) # untuk visualisasi
ggplot(Marriage,
aes(x = zodiacs,
y = ..count.. / sum(..count..))) +
geom_bar(fill = rainbow(12), color= "azure4") +
theme_minimal() + # menggunakan tema minimal
labs(x = "Zodiacs",
y = "Percent",
title = "Marriage Participants in Percent") +
scale_y_continuous(labels = scales::percent) # menambahkan simbol % untuk label sumbu y ### Diagram Batang yang Dikelompokkan
library(ggplot2) # untuk visualisasi
ggplot(mpg, aes(x = class, fill = drv)) +
theme_minimal() + # menggunakan tema minimal
geom_bar(position = position_dodge(preserve = "single"))library(dplyr) # untuk manipulasi data
library(ggplot2) # untuk visualisasi
library(scales) # menentukan jeda atau 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))## `summarise()` has grouped output by 'class'. You can override using the `.groups` argument.
# membuat diagram batang tersegmentasi
# 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()# 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)## Warning: package 'vcd' was built under R version 4.1.2
## Loading required package: grid
mosaic(tbl, main = "Titanic data") ## Kontinu vs. Kontinu Hubungan dua garis variabel kuantitatif biasanya di tunjukkan menggunakan plot sebaran dan grafik garis.
library(ggplot2) # visualisasi data
library(hrbrthemes) # untuk tema `theme_ipsum()` dan legend## Warning: package 'hrbrthemes' was built under R version 4.1.2
## NOTE: Either Arial Narrow or Roboto Condensed fonts are required to use these themes.
## Please use hrbrthemes::import_roboto_condensed() to install Roboto Condensed and
## if Arial Narrow is not on your system, please see https://bit.ly/arialnarrow
# Membuat data
d1 <- data.frame(x=seq(1,100),
y=rnorm(100),
name="No trend")
d2 <- d1 %>%
mutate(y=x*10 + rnorm(100,sd=60)) %>%
mutate(name="Linear relationship")
d3 <- d1 %>%
mutate(y=x^2 + rnorm(100,sd=140)) %>%
mutate(name="Square")
d4 <- 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(d1, d2, d3, d4))
# Plot
don %>%
ggplot(aes(x=x, y=y)) +
geom_point(color="#69b3a2", alpha=0.8) +
theme_ipsum() +
facet_wrap(~name, scale="free")## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): font family not
## found in Windows font database
## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): font family not
## found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_stringMetric, as.graphicsAnnot(x$label)): font family not
## found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : font
## family not found in Windows font database
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
## font family not found in Windows font database
library(ggplot2) # untuk visualisasi
library(scales) # menentukan jeda atau label secara otomatis
data(Salaries, package="carData")
# plot sebaran yang ditingkatkan
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") ### Plot Sebaran Menyesuaikan Garis
library(ggplot2) # untuk visualisasi
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")## `geom_smooth()` using formula 'y ~ x'
library(ggplot2) # untuk visualisasi
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")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()## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
library(dplyr) # untuk manipulasi data
library(ggplot2) # untuk visualisasi
library(scales) # menentukan jeda atau label secara otomatis
data(Salaries, package="carData")
# menghitung gaji rata-rata untuk setiap jabatan
plotdata <- Salaries %>%
group_by(rank) %>%
dplyr::summarize(mean_salary = mean(salary))
# plot gaji rata-rata dengan cara yang 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 = "")ggplot(Salaries,
aes(x = salary,
fill = rank)) +
geom_density(alpha = 0.4) +
theme_minimal() +
labs(title = "Salary distribution by rank")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")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")library(dplyr) # untuk manipulasi data
library(ggplot2) # untuk visulisasi
library(ggridges) # untuk mengendalikan visualisasi yang tumpang tindih## Warning: package 'ggridges' was built under R version 4.1.2
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")## Picking joint bandwidth of 0.929
library(dplyr) # untuk manipulasi data
library(ggplot2) # untuk visualisasi
library(ggridges) # untuk menangani visualisasi yang tumpang tindih
# menghitung rata-rata, deviasi standar,
# kesalahan standar, dan 95% interval kepercayaan
# berdasarkan jabatan
plotdata <- 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))## `summarise()` has grouped output by 'rank'. You can override using the `.groups` argument.
# meningkatkan plot rata-rata kesalahan atau standar kesalahan
pd <- position_dodge(0.2)
ggplot(plotdata,
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")library(ggplot2) # untuk visulisasi
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")library(ggplot2) # untuk visulisasi
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()library(ggplot2) # untuk visulisasi
library(scales) # penskalaan infrastruktur
library(ggpol) # plot kotak hibrida - setengah plot sebaran## Warning: package 'ggpol' was built under R version 4.1.2
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")library(ggplot2) # untuk visualisasi
library(scales) # penskalaan infrastruktur
library(ggbeeswarm) # mengurangi tumpang tindih## Warning: package 'ggbeeswarm' was built under R version 4.1.2
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
library(dplyr) # untuk manipulasi data
library(ggplot2) # untuk visualisasi
library(scales) # penskalaan infrastruktur
library(ggbeeswarm) # mengurangi tumpang tindih
library(gapminder) # untuk dataset `gapminder` ## Warning: package 'gapminder' was built under R version 4.1.2
data(gapminder, package="gapminder") # memuat dataset `gapminder`
# subset negara-negara Asian tahun 2007
library(dplyr)
plotdata <- gapminder %>%
filter(continent == "Asia" &
year == 2007)
# Plot Cleveland yang menarik
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())Guna dari grafik multivariat adalah menampilkan hubungan antara tiga variabel atau lebih. Untuk menampung variabel, grafik data multivariat dibagi menjadi dua, yaitu : pengelompokan dan faceting.
Guna pengelompokan adalah untuk memplot data untuk beberapa grup dalam satu grafik. Kita akan menggunakan data set Salaries dan kita akan melihat hubungan antara yrs.since.phd dan salary.
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")Selanjutnya kita akan melihat jenis kelamin dari profressor, menggunakan bentuk titik untuk menentukan jenis kelamin (jika professor ini perempuan, maka bentuk titik nya lingkaran. Sedangkan professor laki-laki, maka bentuk titiknya adalah segitiga).
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") Dibawah ini adalah grafik hubungan antar tahun sejak mendapat gelar Ph.D dan gaji menggunakan ukuran dari tiitk untuk menunjukkan masa kerja, dan ini yang disebut dengan 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") Sebagai contoh terakhir, mari kita lihat
yrs.since.phd vs. salary dan tambahkan warna dan garis kuadrat yang paling cocok pada jenis kelamin.
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",
y = "",
color = "Sex") +
scale_y_continuous(label = scales::dollar) +
scale_color_brewer(palette = "Set1") +
theme_minimal()Guna dari grafik faceting adalah membagi faset, sebuah grafik terdiri dari beberapa plot-plot terpisah atau kelipatan kecil, satu untuk setiap tingkatan dari variabel ketiga, atau kombinasi variabel.
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")## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Fungsi dari
facet_wrap untuk membuat grafik terpisah dalam setiap tingkatan jabaran nya. Fungsi dari ncol adalah untuk mengatur jumlah kolom. Dibawah ini adalah cara menggunakan dua variabel untuk mendefinisikan faset.
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)")## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Sekarang kita akan menggunakan plot Mean/SE dan membagi faset untuk membandingkan gaji-gaji dari professor pria dan wanita, dalam jabatan dan disiplin ilmu. Kita akan membedakan jenis kelamin dan pembagian faset dengan membedakan warna untuk membuat plot-plot jabatan berdasarkan kombinasi disiplin ilmu.
Dibawah ini adalah contoh terakhir, kita akan menggunakan dataset gapminder dalam package gapminder. Fungsi tema digunakan untuk menyederhanakan warna latar belakang, memutar teks sumbu x, dan memperkecil ukuran tulisan.
library(carData) # Untuk Dataset
library(ggplot2) # Untuk Visualisasi
library(dplyr) # Manipulasi Data
# Menghitung rata-rata 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))## `summarise()` has grouped output by 'sex', 'rank'. You can override using the `.groups` argument.
# membuat label yang lebih 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 facet_grid(.~rank+dicipline) tidak menentukan variabel baris (.). Fungsi theme() untuk membuat tea hitam dan putih dan menghilangkan garis grid vertikal dan horizontal minor. Fungsi scale_color_brewer untuk mengubah skema warna untuk titik dan batang-batang kesalahan.
library(gapminder) # untuk dataset
library(ggplot2) # Untuk Visualisasi
library(dplyr) # Manipulasi Data
# memplot harapan hidup berdasarkan tahun secara terpisah
# untuk setiap negara di Asia
data(gapminder, package = "gapminder")
#Pilih data Asia
plotdata <- dplyr:: filter(gapminder,
continent == "Asia")
# memplot 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")