Algoritma & Struktur Data
Visualisasi Data
| Kontak | : \(\downarrow\) |
| brigita.melantika@student.matanauniversity.ac.id | |
| https://www.instagram.com/brgt_tiaraem/ | |
| RPubs | https://rpubs.com/brigitatiaraem/ |
Univariat (Satu Variabel)
Pada data univariat atau bisa disebut dengna satu variabel ini merupakan proses mendistribusikan data dengan satu variabel berupa kategoris / kategori dan numerik / angka.
Variabel Kategori
Pada variabel kategori ini data dapat digambarkan dengna menggunakan diagram batang, lingkaran, atau pohon.
Diagram Batang
Pada diagram batang digambarkan dengan bentuk batang dengan arah horizontal atau vertikal yang bertujuan untuk menampilkan perbandingan antar kategori. Pada contoh dibawah akan ditunjukan dataset Marriage yang sumber package dari mosaicData. Contoh ini didasarkan pada distribusi peserta pernikahan berdasarkan zodiaknya.
library(ggplot2) # bentuk visualisasi
#setwd("C:/Users/kuliah semester 3/alogaritma/") # atur working directory
Marriage<-read.csv("https://raw.githubusercontent.com/Bakti-Siregar/dataset/master/Bookdown-Data-Science-for-Beginners/Marriage.csv")
ggplot(Marriage, aes(x=zodiacs))+ # proses plot distribusi dari "Zodiacs"
geom_bar(fill="cornflowerblue",
color="azure4")+ # aturan ganti warna
theme_minimal()+ # mengubah tema minimal
labs(x="Zodiacs", # mengganti label dan judul pada plot
y="Frequency",
title="Marriage Participants by Zodiacs")perintah aeas(x=sign) digunakan untuk presentase dari jumlah yang mana merupakan aes(x=sign, y=..count..). “..count..” ini merupakan variabel khusus dalam menggambarkan frekuensi pada kategori.
library(ggplot2)
ggplot(Marriage,
aes(x=zodiacs,
y=..count../sum(..count..)))+
geom_bar(fill=rainbow(12), color="azure4")+
theme_minimal()+
labs(x="Zodiacs",
y="Percent",
title="Marriage Participants in Percent")+
scale_y_continuous(labels=scales::percent) # menambahkna simbol "%" pada label sumbu ynote: Penentuan warna dalam R dapat dijalankan dengan perintah (col=“red”) atau (col=“#FFCC00”) yang bisa didapatkan melalui packager RColorBrewer. Adapun perintah dengan fungsi”reorder” yang bertujuan untuk mengurutkna kategori yang didasarkan oleh frekuensi dan fungsi (stat=“identity”) digunakna untuk tidak memberikan perhitungan jumlah dikarenakan mereka diberikan secara langsung.
library(dplyr)
library(ggplot2)
plotdata<-Marriage%>%
count(zodiacs)
ggplot(plotdata,
aes(x=reorder(zodiacs,n),
y=n))+
geom_bar(stat="identity",
fill=rainbow(12),
color="azure4")+
theme_minimal()+
labs(x="Zodiacs",
y="Frequency",
tittle="Sorting Categories")berikut cara memberikan label pada setiap batang dengan nilai numeriknya.
library(dplyr)
library(ggplot2)
library(scales)
plotdata<-Marriage%>%
count(zodiacs)%>%
mutate(pct=n/sum(n),
pctlabel=paste0(round(pct*100),"%"))
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()+
scale_y_continuous(labels=percent)+
labs(x="Zodiacs",
y="Percent",
title="Labeling Bars")Berikut cara yang dapat dilakukan jika label kategori saling tumpang tindih dengan memutar label sumbu.
library(ggplot2)
library(scales)
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)+
theme_minimal()+
labs(x="Zodiacs",
y="Percent",
title="Overlapping Labels")+
theme(axis.text.x=element_text(angle=45, hjust=1))Berikut cara yang dapat dilakukan untuk membalikkan sumbu x dan y.
library(ggplot2)
library(scales)
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.10)+
scale_y_continuous(labels=percent)+
theme_minimal()+
labs(x="Zodiacs",
y="Percent",
title="Overlapping Labels")+
coord_flip()DIAGRAM PAI
Diagram lingkaran atau diagram pai ini merupakan bentuk grafik statistik yang digambakan seperti lingkaran yang dibagi menjadi irisan-irisan untuk menggambarkan proporsi numerik yang berguna dalam membandingkan frekuensi pada setiap kategori.Berikut contoh menggunakan perintah untuk membuat diagram pai dengan ggplot.
library(dplyr)
library(ggplot2)
library(scales)
#mempersiapkan data
plotdata<-Marriage%>%
count(race)%>%
arrange(desc(race))%>%
mutate(prop=round(n*100/sum(n),1),
lab.ypos=cumsum(prop)-0.5*prop)
#membuat digram 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")Berbeda dengan diagram pai, diagram donat ini lebih unik karena dibagian tengah diagram memiliki lubang namun dengna tujuan yang masih sama. Fungsi untuk membuat diagram donat dengna menentukan x=2 dan xlim=c(0.5, 2,5) yang bertujuan untuk memberi lubang pada tengah diagram. Adapun “width” yang digunakna pada fungsi “geom_bar”.
library(ggplot2)
library(scales)
#memproses digram donat
ggplot(plotdata, aes(x=2,y=prop,fill=race))+
geom_bar(width = 1,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")Berikut cara memberikan label dan menghapus legend.
library(ggplot2)
library(scales)
#menambahkan label persen
plotdata$percent<-paste0(plotdata$race, "\n",
round(plotdata$prop),"%")
#memproses digram donat
ggplot(plotdata, aes(x=2,y=prop,fill=race))+
geom_bar(width = 1,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
Selain diagram pai, adapun peta pohon yang dapat memvisualisasikan setiap kategori dalam bentuk hierarki ataupun lainnya.
library(ggplot2)
#install.packages('treemapify')
library(treemapify)
library(scales)
plotdata<-Marriage%>%
count(officialTitle)
ggplot(plotdata,
aes(fill=officialTitle,
area=n))+
geom_treemap()+
labs(title="Marriage Participants by Officiate")Berikut perintah yang dapat dijalankan untuk menambahkan label pada peta pohon.
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")VARIABLE KONTINU
Pada variabel kontinu ini biasanya digambarkan dengan plot histogram, densitas kernel, atau plot titik.
Histogram
Berikuat perintah membuat histogram dengan dataset Marriage dengan memplot usia dari peserta pernikahan.
library(ggplot2)
ggplot(Marriage, aes(x=age))+
geom_histogram(fill="cornflowerblue",
color="white", bins=20)+
theme_minimal()+
labs(title="Marriage Participants by ade(Basic)",
x="Age")Dari data diatas dapat dilihat bahwa perserta yang ada merupakan kelompok yang berusia 20-an tahun dan 40-an tahun namun kelompok yang lebih kecil dengan berusia 60-an dan 70-an tahun. Pada histogram adapun cara untuk mengganti warna dengan opsi “fill” untuk warna isian pada batang dan “color” untuk warna batas pada garis batang. Perintah “binwidth” dapat digunakna juga.
library(ggplot2)
library(scales)
ggplot(Marriage,
aes(x=age,
y=..count../sum(..count..)))+
geom_histogram(fill="cornflowerblue",
color="white",
binwidth = 5)+
theme_minimal()+
labs(title="Marriage Participants by age(Alternative Bins and bandwidths)",
y="Percent",
x="Age")+
scale_y_continuous(labels=percent)Berikut sumbu y dapat mewakili jumlah atau persen dari total.
library(ggplot2)
library(scales)
ggplot(Marriage,
aes(x=age,
y=..count../sum(..count..)))+
geom_histogram(fill="cornflowerblue",
color="white",
binwidth = 5)+
theme_minimal()+
labs(title="Marriage Participants by age(Percent)",
y="Percent",
x="Age")+
scale_y_continuous(labels=percent)Plot Densitas Kernel
Perkirain densitas kernel ini merupakan metode non-parametrik yang berfungsi untuk memperkirakan fungsi densitas probabilitas dari variabel acak kontinu. Perkiraan densitas kernel ini menggunakan fungsi kernel yang halus untuk blok bangunan maka akan didapat fungsi penduga kepekatan yang halus dan untuk menghilangkan ketergantungan titik awal interval, penduga kepekatan kernel memusatkan fungsi kernel pada setiap titik data.
library(ggplot2)
ggplot(Marriage, aes(x=age))+
geom_density(fill="indianred3")+
theme_minimal()+
labs(title="Marriage Participants by age")Parameter Penghalusan (Smoothing)
fungsi “bw” pada parameter bandwidth digunakan untuk mengontrol tingkat kehalusan dan fungsi “bw.nrd0” dapat digunakan untuk menentukan nilai default pada variabel.
library(ggplot2)
bw.nrd0(Marriage$age)## [1] 5.181946
ggplot(Marriage, aes(x=age))+
geom_density(fill="deepskyblue",
bw=1)+
theme_minimal()+
labs(title="Marriage Participants by age",
subtitle="bandwidth=1")Plot densitas kernel ini dapat melihat dengan mudah mana skor dan anama yang relatif jarang. Namun, kelemahannya tidak bisa menjelaskan arti dari sumbu y untuk pemula.
Diagram Titik
Diagram titik adalah suatu gambaran untuk memperlihatkan atau menerangkan suatu data yang akan disajikan menggunakan titik-titik.Pada lebar dari titik-titik tersebut sama dengan lebar dari bin, dan titik bertumbuk.
library(ggplot2)
ggplot(Marriage, aes(x=age))+
geom_dotplot(fill="gold",
color="azure4",
binwidth=2)+
theme_minimal()+
labs(title="Paticipants by age",
y="Proportion",
x="Age")Data Bivariat
Data bivariat ini ditujukan pada hubungan antara dua variabel dengan jenis grafik yang bergantung pada tingkat pengukuran dari variabelnya baik kuantitatif ataupun kategorikal.
Kategorikal vs Kategorikal
Diagram Batang Bertumpuk
Berikut contoh data dengna hubungna antara kelas mobil dengan jenis penggerak dengan dataset fuel economy.
library(ggplot2)
mpg$drv<-factor(mpg$drv,
levels=c("f","r","4"),
labels=c("front-wheel","rear-wheel","4-wheel"))
#diagram batang bertumbuk
ggplot(mpg,
aes(x=class,
fill=drv))+
geom_bar(positon="fill")+
theme_minimal()+
labs(y="Propotion")Diagram Batang yang Dikelompokkan
Berikut perintah yang dapat digunakna untuk diagram batang yang dikelompokkan yaitu (position=“single”) dengan menggunakan package ggplot2.
library(ggplot2)
ggplot(mpg, aes(x=class, fill=drv))+
theme_minimal()+
geom_bar(position=position_dodge(preserve="single"))Diagram Batang Tersegmentasi
Diagram batang tersegmentasi merupakan plot batang bertumpuk dengan setiap batang mewakili 100 persen dengan fungsi (posiiton=“filled”) yang bertujuan untuk membandingkan persen pada setiap aktegori pada satu variabel di dalam tingkatan variabel. Berikut contoh denga proporsi mobil dengna penggerak roda depan meningkat saat anda memindahkan dari mobil penumpang yang ekcil, ke menengah, ke minivan.
library(dplyr)
library(ggplot2)
library(scales)
# membuat ringkasan dataset
plotdata<-mpg%>%
group_by(class, drv)%>%
dplyr::summarize(n=n())%>%
mutate(pct=n/sum(n),
lbl=scales::percent(pct))
#membuat diagram batang tersegmentasi dengan menambahkan label pada 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()+
labs(y="Percent",
fill="Drive Train",
x="Class",
title="Automobile Drive by Class")+
theme_minimal()Note : Berikut cara yang dapat digunakan opsi tambahan untuk meningkatkan warna dan label yaitu:
“pactor” yang digunakan untuk urutan dari kategori unutk variabel kelas dan urutan serta “labels” yang digunakan untuk variabel drive.
“scale_y_conotinuous” yang digunakan utnuk mengubah label tanda centang sumbu y.
“labs” yang digunakan untuk memberi judul dan mengubah label pada sumbu x, sumbu y, dan legend.
“scale_fill_brewer” yang digunakan untuk mengubah warna isian.
“theme_minimal” yang digunakan untuk menghapus latar belakang abu-abu dan mengubah warna kisi.
Plot Mosaik
Mosaic plot adalah salah satu metode deskriptif untuk menggambarkan data kategorik secara grafik, sehingga dapat dianalisis hubungan antara peubah-peubahnya. Pada R, plot mosaic dapat dibuat dengna ggplot2 dengan package “ggmosaic” dan package “vcd”. Berikut contoh visualisasi hubungna antara 3 variabel kategorikal dalam Titanic.
#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
#install.packages('vcd')
library(vcd)
mosaic(tbl, main="Titanic data")Dari data diatas dapat dilihat bahwa ukuran pada setipa ubin dapat mewakili persentase kasus pada setiap tingkatan. Data menunjukan bahwa lebih banyak penumpang yang tewas daripada yang selamat dengan penumpang laki-laki kelas 3 dan kru laki-laki.
Pada data diatas, dapat diasumsikan bahwa dari tiga variabel tidak memiliki ketergantungan maka dapat melihat residual dari model dan memberi bayangan pada ubin. Keterangan warna biru gelap menggambarkan bahwa lebih banyak kasus dari yang diharapkan tidak terikat. Sedangkan warna merah tua menggambarkan lebih sedikit kasus dari yang diharapkan jika berlaku tidak terikat.
#install.packages('ggmosaic')
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="Titanic data")Dari data diatas, dapat dilihat bahwa class, gender, dan survival adalah tidak terikat.
Kontinu vs Kontinu
Kontinu vc kontinu ini merupakan hubungan anatara dua variabel kuantitatif dengan plot sebaran dan grafik garis.
Plot Sebaran
Plot sebaran digunakan untuk menghubungandua variabel dengan perhitungan koefisien korelasi dengna mengukur hubunngan linear. Plot sebaran ini menyesuaikan model yang menjelaskan y dalam fungsi x.Berikut merupakan contoh pola plor sebaran.
library(ggplot2)
#install.packages('hrbrthemes') # tema 'theme_ipsum()' dan legend
library(hrbrthemes)
#install.package('devtools')
# 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")Berikut contoh dengan fungsi “Salaries” denga memplot pengalaman (yrs.since.phd) vc gaji akademik (salary).
library(ggplot2)
#install.packages('scales')
library(scales)
#install.packages('carData')
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()+
labs(x="Years Since PhD",
y="",
title="Experience vs Salary",
subtitle="9-month salary for 2008-2009")Note: Adapun fungsi “geom_point” digunakan untuk mengubah “color” yaitu warna titik, “size” yaitu ukuran titik, “shape” yaitu bentuk titik, dan “alpha” yaitu transparansi titik yang berkisaran 0-1 kearah yang lebih buram.
Fungsi “scale_x_continuous” dan “scale_y_continuous” digunakan untuk mengontrol penskalaan pada sumbu x dan y.
Plot Sebaran Menyesuikan Garis
Plot sebaran dengan memberikan garis yang sesuai baik itu linear, polinomial, dan non-parametrik dengan batas kepercayaan 95%.
library(ggplot2)
#install.packages('carData')
ggplot(Salaries,
aes(x=yrs.since.phd,
y=salary))+
geom_point(color="cornflowerblue")+
geom_smooth(method="Im", color="brown1")+
theme_minimal()+
labs(x="Years Since PhD",
y="",
title="Experience vs Salary",
subtitle="9-month salary for 2008-2009")Dari data diatas dapat dilihat bahwa gaji akan meningkat sesuai dengan pengalaman.Gris lurus pda data ini tidak dapat merangkap efek non-linear sehingga garis lengkungan akan lebih baik dan pas. Garis regresi polinomial memberikan garis pas dengan bentuk : y ̂=β_0+β_1 x+β-〖2x〗^2+⋯+β_n x^2
Dengan menggunakan garis kuadrat atau kubik (dua lengkungan). Penggunan polinomial ini orde tinggi (>3) ini jarang digunakan.
library(ggplot2)
#install.packages('carData')
ggplot(Salaries,
aes(x=yrs.since.phd,
y=salary))+
geom_point(color="cornflowerblue")+
geom_smooth(method="Im",
formula=y~poly(x,2),
color="yellow")+
theme_minimal()+
labs(x="Years Since PhD",
y="",
title="Experience vs Salary",
subtitle="9-month salary for 2008-2009")Adanya default pada ggplot2 ini adalah garis loess yang dapat diartikan sebagai penghalus plot sebaran.
library(ggplot2)
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()+
labs(x="Years Since PhD",
y="",
title="Experience vs Salary",
subtitle="9-month salary for 2008-2009")+
theme_minimal()Kategorikal vs Kontinu
Pada plo hubungan antara kategorikal dengan kontinu ini memiliki banyak jenis grafik.
Diagram Batang(Ringkasan Statistik)
Pada diagram batang kali ini digunakan untuk meringkas statistik seperti mea, media, dan lainnya pada variabel kuantitatif untuk setiap variabel kategorikal.
Berikut contoh data dengan menampilkan gaji rata-rata untuk sampel professor universitas berdasarkan jabatan akademiknya.
library(dplyr)
library(ggplot2)
library(scales)
#menghitung gaji rata-rata pada setiap jabatan
plotdata<-Salaries%>%
group_by(rank)%>%
dplyr::summarize(mean_salary=mean(salary))
#plot gaji rata-rata dengna cara 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.02)+
scale_y_continuous(breaks=seq(0,130000,20000),
label=dollar)+
theme_minimal()+
labs(title="Mean Salary by Bank",
subtitle="9-month academic salary for 2008-2009",
x="",
y="")Plot Densitas Kernel yang Dikelompokan
Plot densitas kernel ini dapat menjukan perbandingan kelompok pada variabel dengan memberikan plot distribusi gaji berdasarkan jabatan.
ggplot(Salaries,
aes(x=salary,
fill=rank))+
geom_density(alpha=0.4)+
theme_minimal()+
labs(title="Salary distribution by rank")Opsi “Alpha” digunakan untuk transparansi data sehingga terlihat data yang saling bertindihan.
Boxplot
Boxplot ini merupakan bentuk plot yang digunakan untuk membandingakan kelompok disetiap tingkatan variabel pada variabel numerik. Berikut contoh boxplot untuk distribuasi gaji pada setiap jabatan. Boxplot ini menggunakan metode perkiraan dengan memvisualisasikan perbedaan pada kelompok dengan takik yang tidak bertumpang tindih maka adanya selang kepercayaan 95% sehingga median dari kedua kelompok berbeda.
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")Dari data yang diperoleh di atas, ketiga kelompok memiliki perbedaan.
Plot Biola
Plot biola ini tidak jauh beda dengan plot densitas kernel hanya saja dicerminkan dan diputas 90 derajat. Berikut contoh dengan menggunakna fungsi pada R dalam membuat plot biola.
ggplot(Salaries,
aes(x=rank,
y=salary))+
geom_violin(fill="azure1")+
geom_boxplot(width=.2,
fill=mycols,
outlier.color = "red",
outlier.colour = 2)+
theme_minimal()+
labs(title="Salary distribution by rank")Plot Garis Punggung
Pada plot garis punggung ini menggunakan package “ggridges” yang memiliki tujuan untuk menunjukan distribusi variabel kuantitatif. Berikut contoh kasus dengan dataset fuel ekonomy pada plot garis punggung.
library(dplyr)
library(ggplot2)
library(ggridges)
ggplot(mpg,
aes(x=cty,
y=class,
fill=class))+
geom_density_ridges(alpha=0.7)+
theme_ridges()+
labs("Highwat mileage by auto class")+
theme(legend.position = "none")Dari data diatas dapat dilihat bahwa truck pickup memiliki jarak tempuh yang paling rendah daripada mobil subkompak dan kompak yang lebih cenderung mencaapi peringkat. Digunakannya fungsi “geom_density_ridges(alpha=n)” yang berguna untuk memberikan transparansi karena ada plot yang saling bertumpang tindih.
Plot Garis
Berikut penerapan plot garis dengan mencari sd, kesalahan standar dari mean, atau interval kepercayaan pada data gaji terhadap jabatan dan jenis kelamin.
library(dplyr)
library(ggplot2)
library(ggridges)
# menghitung mean, sd, 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))
#meningkatkan plot 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")Plot Strip
Plot strip atau plot sebaran ini menampilkan hubungan anatara variabel pengelompokan dan variabel numerik dengan plot sebaran. Adapun fungsi (legend.position=“none”) yang digunakan untuk menyembunyikan legend. Berikut contoh perintah yang digunakan dalam membuat plot strip pada kasus distribusi gaji berdasarkan jabatan.
library(ggplot2)
library(scales) # menskala 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")Menggabungkan Jitter dengan Plot Kotak
Adapun cara dalam memvisualisasikan distribusi dengan menambahkan plot kotak ke plot jitter. Pada plot kotak (size=1) digunakan untuk membuat garis menjadi lebih tebal, (outlier.color=“black ) digunakan untuk membuat pencilan berwarna hitam, (outlier.shape=1) digunakan untuk menentukan lingkaran untuk pencilan, dan (outlier.size=3) dugunakan untuk meningkatkan ukuran dalam pencilan. Sedangkan untuk jitter fungsi (alpha=0.5) digunakan untuk membuat titik menjadi lebih transparansi dan (width=.2) digunakan untuk mengurangi jumlah jitter.Adapun fungsi (coord_flip) yang digunakan untuk membalikkan sumbu x dan y.
library(ggplot2)
library(scales)
ggplot(Salaries,
aes(x=factor(rank,
labels=c("Assistant\nProfessor",
"Associate\nProfessor",
"Full\nProfessor")),
y=salary,
color=rank))+
geom_boxplot(size=1,
outliner.shape=1,
outliner.color="black",
outliner.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()Fungsi diatas yaitu (geom_boxjitter) pada package “ggpol” yang digunakan untuk membuat plot kotak hibrida antara 50% plot kotak dan 50% plot sebaran.
library(ggplot2)
library(scales)
#install.packages('ggpol')
library(ggpol)
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 kawanan lebah ini hampir sama dengan plot sebaran jitter yang mana menampilkan distribusi dari variabel kuantitatif dengan memplot titik-titik dengan cara mengurangi tumpang tindih. Dengan fungsi “geom_quansirandom” yang dapat digunakna untuk mempermudah membaca plot daripada plot strip jitter.
library(ggplot2)
library(scales)
#install.packages('ggbeeswarm')
library(ggbeeswarm)
ggplot(Salaries,
aes(x=factor(rank,
labels=c("Assistant\nProfessor",
"Associate\nProfessor",
"Full\nProfessor")),
y=salary,
color=rank))+
geom_quasirandom(alpha=0.7,
width=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")## NULL
Digram Titik Cleveland
Diagram titik cleveland dengan menggunakan dataset “gapminder” ini berguna jika ingin membandingkan statistik numerik pada sejumlah kelompok besar. Berikut contoh penerapan diagram titik cleveland pada kasus harapan hidup pada tahun 2007 untuk negara Asia.
library(dplyr)
library(ggplot2)
library(scales)
library(ggbeeswarm)
library(gapminder)
data(gapminder, package="gapminder")
#install.packages('gapminder')
# subset negara-negara Asia 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 (years)",
subtitle="GapMinder data for Asia - 2007")+
theme_minimal()+
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank())Data Multivariat
Pada data multivariat ini akan menampilkna 3 variabel maupun lebih dengan dua metode yaitu pengelompokan dan faceting.
Pengelompokan
Pada data multivariat pengelompokan ada 2 jenis variabel dengan diberikan pada sumbu x dan y dan dapat ditambahkan variabel yang difokuskan pada karakteristik visual. Digunakannya datase “Salaries” dengan menampilkan hubungan antara (yrs.since.phd) dan (salary).
library(carData)
library(ggplot2)
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")Berikut contoh menambahkan jenis kelamin profesor dengan menggunakan titik.
library(carData)
library(ggplot2)
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 and years since degree")Berikut contoh penerapan hubungan anatar tahun sejak Ph.D dan gaji dengen menggunakan ukuran dari titik yang melambangkan lama masa kerja atau bisa disebut dengna plot gelembung.
library(carData)
library(ggplot2)
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 and years since degree")Berikut contoh dalam menambahkan jenis kelamin dengan warna dan garis kuadrat yang paling pas.
library(carData)
library(ggplot2)
ggplot(Salaries,
aes(x=yrs.since.phd,
y=salary,
color=sex))+
geom_point(alpha=.4,
size=3)+
geom_smooth(se=FALSE,
method="Im",
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()Pembagian Faset (Faseting)
Pembagian faset ini menggambarkan kumpulan plot yang terpisahpada sebuah grafik pada setiap tingkatan dari variabel ketiga ataupun kombinasi variabel. Adapun fungsi(facet_wrap) yang dapat digunakan dalam membuat grafik terpisah pada setiap tingkatan jabatan dan opsi (ncol) yang berguna unutk mendefinisikan faset. Berikut adalah contoh penerapan dalam pembagian faset.
library(carData)
library(ggplot2)
ggplot(Salaries,aes(x=salary))+
geom_histogram(fill="cornflowerblue",
color="white")+
facet_wrap(~rank, ncol=1)+
theme_minimal()+
labs(title="Salary histogram by rank")Pada data diatas akan dibuat plot Mean/SE dan pembagian faset yang bertujuan untuk membandingkan gaji dari profesor dalam jabatan dan disiplin ilmu dengan menggunakan tampilan warna dalma membedakan jenis kelamin dan pembagina faset.
library(carData)
library(ggplot2)
ggplot(Salaries, aes(x=salary/1000))+
geom_histogram(color="white",
fill="cornflowerblue")+
facet_grid(sex~rank)+
theme_minimal()+
labs(title="Salary histogram by sex and rank",
x="Salary ($1000)")library(carData)
library(ggplot2)
library(dplyr)
# menghitung mean 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 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 dan kolom pada kombinasi jabatan dan disiplin ilmu. Pada fungsi “theme()” yang digunakan untuk membuat tema hitam-putih dan menghilangkan garis grid vertikal-horizontal minor. Sedangkan fungsi (scale_color_brewer) digunakan untuk mengubah skema warna untuk titik dan batang kesalahan.
Berikut contoh peralihan dataset baru dan plot pada perubahan di harapan hidup dari waktu ke waktu untuk negara-negra di Asia dengan dataset (gapminder) pada package (gapminder) dengan munculnya setiap faset pada setiap negara.
library(gapminder)
library(ggplot2)
library(dplyr)
# membuat plot harapan hidup berdasarkan tahun
# secara terpisah pada setiap negara di Asia
# memilih data Asia
plotdata<-dplyr::filter(gapminder,
continent=="Asia")
# membuat plot harapan hidup berdasarkan tahun pada 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")