Visualisasi Data dengan ggplot
Tidyverse
Tidyverse adalah kumpulan package R yang berfungsi untuk melakukan pengolahan data seperti import, subset, visualisasi, transformasi, dan lain sebagainya. Tidyverse diciptakan oleh Hadley Wickham dan timnya dengan tujuan menyediakan semua tools untuk membersihkan, merapikan dan bekerja dengan data. Terdapat ggplot2 untuk data visualisation atau visualisasi data, yang memungkinkan pengguna membuat grafik yang kompleks dengan sintaks yang elegan.
Sebelum melakukan pemrograman simpan R Script dalam suatu folder bersama folder data yang telah diekstrak!
Install packages dan menjalankan library
## Warning: package 'tidyverse' was built under R version 4.4.3
## Warning: package 'readr' was built under R version 4.4.3
## Warning: package 'lubridate' was built under R version 4.4.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
Tema
Fungsi ggplot() dalam R digunakan untuk memulai pembuatan grafik dengan pendekatan grammar of graphics, di mana pengguna dapat menambahkan elemen visual secara bertahap. Saat digunakan bersama tema, tampilannya bisa disesuaikan. Misalnya, ggplot() + theme_bw() menghasilkan grafik dengan latar putih dan garis kisi hitam yang bersih, cocok untuk presentasi akademik. Tema ggplot() + theme_classic() memberikan tampilan minimalis dengan sumbu tanpa kisi, menyerupai grafik klasik. Sementara itu, ggplot() + theme_dark() menyajikan grafik dengan latar gelap yang ideal untuk tampilan modern atau kebutuhan visual kontras tinggi.
Title
Kode berikut membuat grafik scatter plot menggunakan paket ggplot2 dalam R. Data dibentuk dari vektor x = 1:10 dan y = x^2, kemudian digabungkan menjadi sebuah data frame bernama z. Objek grafik p dibuat dengan ggplot(z, aes(x, y)), lalu ditambahkan lapisan geom_point() untuk menampilkan titik-titik biru dengan bentuk simbol tertentu (shape = 10). Judul grafik disetel dengan ggtitle(), dan label sumbu x dan y diatur masing-masing melalui xlab() dan ylab(). Tampilan grafik menggunakan tema bersih dari theme_classic(), sedangkan posisi judul di tengah disesuaikan menggunakan theme(plot.title = element_text(hjust = 0.5)). Grafik ditampilkan dengan memanggil objek p.
x=1:10;y=x^2;z=data.frame(x,y)
p<-ggplot(z,aes(x,y)) +
geom_point(color = 'blue', shape = 10) +
ggtitle('Kepadatan Penduduk Terhadap Penjualan Sepatu') +
xlab('Jumlah Penduduk') +
ylab('Penjualan') +
theme_classic() +
theme(plot.title = element_text(hjust = 0.5))
p
Data mtcars
Dataset mtcars adalah kumpulan data bawaan dalam R yang berisi informasi teknis tentang 32 mobil berbeda yang diuji oleh majalah Motor Trend pada tahun 1974. Setiap baris mewakili satu mobil, sementara setiap kolom menunjukkan karakteristik tertentu seperti efisiensi bahan bakar (mpg), jumlah silinder (cyl), tenaga kuda (hp), berat mobil (wt), waktu akselerasi (qsec), dan jenis transmisi (am). Dataset ini sering digunakan dalam pembelajaran statistik dan pemrograman R untuk demonstrasi analisis regresi, visualisasi data, dan eksplorasi data karena strukturnya yang sederhana namun kaya akan variabel numerik yang relevan untuk analisis performa kendaraan.
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
Scatter Plot
- Visualisasi menggunakan ggplot2 menunjukkan hubungan antara berat mobil (wt) dan efisiensi bahan bakar (mpg) dari dataset mtcars.
- Grafik pertama menggunakan scatter plot dasar
dengan fungsi
geom_point()
. - Warna titik dapat diubah menjadi merah menggunakan argumen color=“red”.
- Ukuran titik dapat diperbesar dengan menggunakan size=3.
- Dimensi titik dapat dikaitkan dengan jumlah silinder (cyl) menggunakan estetika size=cyl.
- Warna titik juga dapat mencerminkan nilai dari cyl, sambil menjaga ukuran tetap, misalnya size=4.
- Kombinasi antara color=cyl dan size=hp memperlihatkan dua variabel sekaligus melalui warna dan ukuran titik.
- Penggunaan factor(cyl) mengubah variabel silinder menjadi kategorik sehingga tiap kategori memiliki warna berbeda.
- Transparansi grafik dapat ditambahkan dengan alpha=0.5, dan ukuran titik diperbesar misalnya menjadi size=10.
- Palet warna dapat dikustomisasi menggunakan scale_color_brewer(palette=“Spectral”) untuk warna-warna yang menarik.
- Alternatif lain adalah menggunakan scale_color_manual() untuk menentukan warna secara manual.
- Bentuk titik dapat diubah, misalnya menggunakan shape=8, dan warna khusus seperti “#006666”. Bentuk titik-titik dapat dilihat di https://www.sthda.com/english/wiki/ggplot2-point-shapes
- Fungsi scale_shape_manual() digunakan untuk mengatur bentuk titik secara manual, namun hanya dapat digunakan untuk variabel kategorik (faktor).
ggplot(data = mtcars, aes(x = wt, y = mpg,color=factor(cyl))) +
geom_point(alpha=0.5,size=10)+
scale_color_brewer(palette="Spectral")
ggplot(data = mtcars, aes(x = wt, y = mpg,color=factor(cyl))) +
geom_point(alpha=0.5,size=10)+
scale_color_manual(values=c("#006666","#00FF00","#FFFF00"))
ggplot(mtcars, aes(x = wt, y = mpg, shape = factor(cyl))) +
geom_point(size = 3) +
scale_shape_manual(values = c(15, 17, 19))
Scatter Plot dengan garis
- Kode-kode ini menggunakan ggplot2 untuk memvisualisasikan hubungan antara variabel berat mobil (wt) dan efisiensi bahan bakar (mpg) dari dataset mtcars.
- Titik awal grafik disimpan dalam objek grsp1, yang berisi scatter plot dasar menggunakan fungsi ggplot() dan geom_point().
- geom_line() digunakan untuk menambahkan garis yang menghubungkan titik-titik dalam urutan data.
- geom_hline() dan geom_vline() digunakan untuk menambahkan garis horizontal dan vertikal pada grafik, baik berdasarkan nilai tetap maupun nilai rata-rata dari variabel.
- Model regresi linier sederhana dibentuk dengan fungsi lm(), yang memperkirakan hubungan antara mpg dan wt.
- Koefisien model (intercept dan slope) diperoleh dengan fungsi coef().
- Garis regresi ditambahkan ke grafik menggunakan geom_abline(), dengan memanfaatkan slope dan intercept dari hasil regresi.
- Fungsi annotate() digunakan untuk menambahkan teks ke dalam grafik, seperti penulisan persamaan regresi, guna memperkuat interpretasi visualisasi.
- Kombinasi elemen-elemen ini membuat grafik menjadi lebih informatif, komunikatif, dan dapat diinterpretasikan secara statistik.
grsp1+geom_hline(yintercept = mean(mtcars$mpg),size=1)+geom_vline(xintercept = mean(mtcars$wt),size=1)
## (Intercept) wt
## 37.285126 -5.344472
grsp1+geom_abline(slope=coef(z)[2],intercept = coef(z)[1])+
annotate("text", x =2.5, y = 27.5,label="mpg=37.285-5.344 wt",color='blue')
Data Series
datas <- read.csv("G:/My Drive/AA Statistika nrfqrmn/1. Pengajaran/Genap 2024 2025/Komputasi Statistika I/Komputasi Statistika I/ggplot2/dataseries.csv", sep=";")
head(datas)
## Tahun Final.Energy.Consumption Ekspor Impor GDP Jumlah.Penduduk
## 1 1990 449715276 25675.3 52116.5 195597.2 177325690
## 2 1991 467805082 29142.4 60083.8 227450.2 179803796
## 3 1992 494501979 33967.0 63296.1 259884.5 182316534
## 4 1993 519695447 36823.0 28327.8 329775.8 184864386
## 5 1994 540963417 40053.3 31988.6 382219.7 187447845
## 6 1995 569027430 45418.2 40654.1 454514.1 190067407
Line Plot
Modifikasi Line Plot
- Kode-kode berikut membuat grafik deret waktu menggunakan ggplot(), yang menggambarkan perkembangan nilai ekspor dan impor berdasarkan variabel Tahun dari dataset datas.
- Visualisasi pertama menampilkan garis ekspor dengan gaya garis dotdash dan ketebalan garis 1.2, memberikan efek visual yang tegas namun tetap halus.
- Titik-titik ekspor ditambahkan menggunakan geom_point() dengan bentuk shape = 21 (lingkaran dengan isian), serta warna isian hijau, yang membantu membedakan nilai-nilai individual dalam seri ekspor.
- Visualisasi kedua menambahkan garis impor dengan gaya garis dashed (putus-putus) dan warna biru, menciptakan kontras yang jelas terhadap garis ekspor.
- Titik-titik impor menggunakan bentuk shape = 22 (persegi dengan isian) dan warna isian kuning, sehingga membedakan bentuk dan warna antara titik ekspor dan impor.
- Kombinasi estetika linetype, shape, fill, dan color dalam grafik ini memberikan representasi visual yang efektif untuk membandingkan dua seri waktu dalam satu tampilan grafik yang informatif.
ggplot(datas, aes(x=Tahun, y=Ekspor)) +
geom_line(linetype = "dotdash",size=1.2)+
geom_point(size=2,shape=21,fill='green')
ggplot(datas, aes(x=Tahun, y=Ekspor)) +
geom_line(linetype = "dotdash",size=1,color="red")+
geom_point(size=2,shape=21,fill='green')+
geom_line(aes(x=Tahun,y=Impor), linetype='dashed',size=1,color='blue')+
geom_point(aes(x=Tahun,y=Impor),shape=22,size=2,fill='yellow')
Lineplot dengan anotasi
- Transformasi data dilakukan dari format wide ke
format long menggunakan fungsi
melt()
dari paketreshape2
. - Kolom yang digunakan dalam transformasi hanya mencakup Tahun, Ekspor, dan Impor yang dipilih dari dataset asli.
- Fungsi
melt()
mengubah struktur data menjadi tiga kolom:- Tahun sebagai identifier tetap,
- variable yang berisi nama variabel (Ekspor atau Impor),
- value yang berisi nilai masing-masing variabel.
- Hasil transformasi disimpan dalam objek
df3
, yang cocok untuk visualisasi multivariat menggunakan ggplot2, seperti membuat grafik garis dengan warna berbeda untuk Ekspor dan Impor. - Selanjutnya, dilakukan penyaringan data untuk tahun
2019 dan disimpan ke dalam objek
dataend
, yang memuat nilai ekspor dan impor khusus untuk tahun tersebut. - Objek
df3
berguna untuk menggambar seluruh tren deret waktu, sedangkandataend
dapat digunakan untuk keperluan anotasi, seperti menambahkan label nilai terakhir pada grafik. - Proses ini meningkatkan fleksibilitas dalam eksplorasi data dan penyajian visual yang lebih informatif dan komunikatif.
## Warning: package 'reshape2' was built under R version 4.4.3
##
## Attaching package: 'reshape2'
## The following object is masked from 'package:tidyr':
##
## smiths
## Tahun variable value
## 1 1990 Ekspor 25675.3
## 2 1991 Ekspor 29142.4
## 3 1992 Ekspor 33967.0
## 4 1993 Ekspor 36823.0
## 5 1994 Ekspor 40053.3
## 6 1995 Ekspor 45418.2
## 7 1996 Ekspor 49814.7
## 8 1997 Ekspor 53443.6
## 9 1998 Ekspor 48847.6
## 10 1999 Ekspor 48665.5
## 11 2000 Ekspor 62124.0
## 12 2001 Ekspor 56323.1
## 13 2002 Ekspor 57105.8
## 14 2003 Ekspor 61034.5
## 15 2004 Ekspor 71584.6
## 16 2005 Ekspor 85659.9
## 17 2006 Ekspor 100798.6
## 18 2007 Ekspor 114101.0
## 19 2008 Ekspor 137020.4
## 20 2009 Ekspor 116510.0
## 21 2010 Ekspor 157779.0
## 22 2011 Ekspor 203496.6
## 23 2012 Ekspor 190031.8
## 24 2013 Ekspor 182551.9
## 25 2014 Ekspor 176292.7
## 26 2015 Ekspor 150393.3
## 27 2016 Ekspor 144489.7
## 28 2017 Ekspor 168828.2
## 29 2018 Ekspor 180012.7
## 30 2019 Ekspor 167683.0
## 31 1990 Impor 52116.5
## 32 1991 Impor 60083.8
## 33 1992 Impor 63296.1
## 34 1993 Impor 28327.8
## 35 1994 Impor 31988.6
## 36 1995 Impor 40654.1
## 37 1996 Impor 42928.6
## 38 1997 Impor 41679.8
## 39 1998 Impor 27336.9
## 40 1999 Impor 24003.3
## 41 2000 Impor 33514.8
## 42 2001 Impor 30962.1
## 43 2002 Impor 31288.9
## 44 2003 Impor 32550.7
## 45 2004 Impor 46524.5
## 46 2005 Impor 57700.9
## 47 2006 Impor 61065.5
## 48 2007 Impor 74473.4
## 49 2008 Impor 129197.3
## 50 2009 Impor 96829.2
## 51 2010 Impor 135663.3
## 52 2011 Impor 177435.7
## 53 2012 Impor 191691.0
## 54 2013 Impor 186628.7
## 55 2014 Impor 178178.8
## 56 2015 Impor 142694.5
## 57 2016 Impor 135652.8
## 58 2017 Impor 156985.5
## 59 2018 Impor 188711.2
## 60 2019 Impor 170727.4
## Tahun variable value
## 30 2019 Ekspor 167683.0
## 60 2019 Impor 170727.4
ggplot(df3, aes(x = Tahun, y = value,color = variable)) +
geom_line(size=1) +
scale_color_manual(values = c("#999999", "#E69F00")) +
theme_minimal()
## Warning: package 'ggrepel' was built under R version 4.4.3
geom_text_repel()
dari paket
ggrepel digunakan untuk memberi label pada titik akhir
(tahun 2019) agar tidak saling menumpuk.
lp2 <- ggplot(df3, aes(x = Tahun, y = value, group = variable)) +
geom_line(aes(color=variable)) +
geom_point(aes(shape=variable))
lp2 + geom_text_repel(aes(label = variable), data = dataend,
color = "black", size = 3)
Data Economics
Dataset economics dalam R merupakan data bawaan dari paket ggplot2 yang berisi informasi ekonomi bulanan Amerika Serikat sejak Juli 1967 hingga tahun 2015. Data ini terdiri dari beberapa variabel penting seperti pce (Personal Consumption Expenditures), pop (jumlah penduduk), psavert (tingkat tabungan pribadi), uempmed (durasi median pengangguran dalam minggu), dan unemploy (jumlah pengangguran dalam ribuan orang). Setiap observasi dicatat berdasarkan tanggal dalam variabel date dengan interval waktu bulanan
## # A tibble: 6 × 6
## date pce pop psavert uempmed unemploy
## <date> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1967-07-01 507. 198712 12.6 4.5 2944
## 2 1967-08-01 510. 198911 12.6 4.7 2945
## 3 1967-09-01 516. 199113 11.9 4.6 2958
## 4 1967-10-01 512. 199311 12.9 4.9 3143
## 5 1967-11-01 517. 199498 12.8 4.7 3066
## 6 1967-12-01 525. 199657 11.8 4.8 3018
melt() digunakan untuk merubah ke format long dengan, sehingga kedua variabel disatukan dalam kolom value, sementara identitas variabel dicatat di kolom variable
ggplot(economics, aes(x=date)) +
geom_line(aes(y = psavert), color = "darkred") +
geom_line(aes(y = uempmed), color="steelblue", linetype="twodash") +
theme_minimal()
df <- melt(economics[, c("date", "psavert", "uempmed")], id="date")
ggplot(df, aes(x = date, y = value,color = variable)) +
geom_line(size=1) +
scale_color_manual(values = c("#999999", "#E69F00")) +
theme_minimal()
Bar Plot
datax <- read.csv("G:/My Drive/AA Statistika nrfqrmn/1. Pengajaran/Genap 2024 2025/Komputasi Statistika I/Komputasi Statistika I/ggplot2/datacontoh3.csv", sep=",")
head(datax)
## kode jeniskelamin pendidikan jenispekerjaan lamabekerja penghasilan
## 1 94001 LAKI LAKI SMA Pegawai swasta 5 12432199
## 2 94002 LAKI LAKI SMA PNS 15 3645634
## 3 94003 LAKI LAKI SMA Pegawai swasta 1 3560606
## 4 94004 LAKI LAKI DIPLOMA Pegawai swasta 6 10254833
## 5 94005 LAKI LAKI DIPLOMA Pegawai swasta 16 5197534
## 6 94006 LAKI LAKI S1 Pegawai swasta 2 8000000
Bar Chart Sederhana
- Kode pertama memvisualisasikan jumlah kategori pendidikan dengan geom_bar(stat = ‘count’), yang menghitung frekuensi tiap kategori secara eksplisit.
- Kode kedua memvisualisasikan jeniskelamin menggunakan geom_bar() tanpa menyebutkan stat, karena count adalah nilai default.
## pendidikan frekuensi
## 1 DIPLOMA 10656
## 2 S1 15726
## 3 S2/S3 1277
## 4 SD 144
## 5 SMA 27582
## 6 SMP 615
- Kode pertama menggunakan geom_col(), yang secara otomatis menggunakan nilai y dari data sebagai tinggi batang.
- Kode kedua menggunakan geom_bar(stat = ‘identity’), yang menghasilkan grafik serupa dengan menyatakan bahwa nilai y diambil langsung dari data, bukan dihitung oleh ggplot.
Modifikasi Bar Chart
- Kode pertama menggunakan geom_bar(stat = “identity”) dengan fill = “white” dan color = “brown”, menciptakan kontras klasik antara isi dan tepi batang.
- Kode kedua mengatur fill = “#FFCC33” (kuning keemasan) dan width = 0.5, menghasilkan batang yang ramping dan estetis.
- Kode ketiga memberi warna berbeda untuk setiap kategori dengan vektor warna pada fill, serta menambahkan theme_minimal() untuk tampilan yang bersih dan modern.
ggplot(data=df, aes(x=pendidikan, y=frekuensi)) +
geom_bar(stat="identity",fill="#FFCC33",width=0.5)
ggplot(data=df, aes(x=pendidikan, y=frekuensi)) +
geom_bar(stat="identity",fill=c('blue','red','green','brown','yellow','green'),width=0.9)+
theme_minimal()
- Kode pertama menggunakan warna kuning emas untuk batang (fill = “#FFCC33”), lebar 0.9, tema minimalis, dan membatasi sumbu Y hingga 30.000 untuk efisiensi ruang.
- Kode kedua menambahkan skala Y dengan breaks tiap 2.000 dan mengganti label kategori X menjadi nama yang lebih informatif menggunakan scale_x_discrete(labels = …).
- Kode ketiga menghapus seluruh garis kisi (grid) pada sumbu X dan Y melalui theme(), menghasilkan tampilan bersih dan fokus, cocok untuk laporan resmi atau publikasi.
ggplot(data=df, aes(x=pendidikan, y=frekuensi)) +
geom_bar(stat="identity",fill="#FFCC33",width=0.9)+
theme_minimal()+
scale_y_continuous(limits = c(0,30000))
ggplot(data=df, aes(x=pendidikan, y=frekuensi)) +
geom_bar(stat="identity",fill="#FFCC33",width=0.9)+
theme_minimal()+
scale_y_continuous(breaks = seq(0,30000,by=2000),limits = c(0,30000))+
scale_x_discrete(labels=c("D","Sarjana","Magister/Doctor","SD","SMA","SMP"))
ggplot(data=df, aes(x=pendidikan, y=frekuensi)) +
geom_bar(stat="identity",fill="#FFCC33",width=0.9)+
theme_minimal()+
scale_y_continuous(breaks = c(0,5000,10000,15000,20000,25000,30000),limits = c(0,30000))+
theme(
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
panel.grid.minor.y = element_blank(),
panel.grid.major.y = element_blank()
)
Mengurutkan bar berdasarkan frekuensi
ggplot(data=df, aes(x=reorder(pendidikan,frekuensi), y=frekuensi)) +
geom_bar(stat="identity",fill="#FFCC33",width=0.9)+
theme_minimal()+
scale_y_continuous(breaks = c(0,5000,10000,15000,20000,25000,30000),limits = c(0,30000))+
theme(
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
panel.grid.major.y = element_blank()
)
ggplot(data=df, aes(x=reorder(pendidikan,-frekuensi), y=frekuensi)) +
geom_bar(stat="identity",fill="#FFCC33",width=0.9)+
theme_minimal()+
scale_y_continuous(breaks = c(0,5000,10000,15000,20000,25000,30000),limits = c(0,30000))+
theme(
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
panel.grid.minor.y = element_blank()
)
Menambahkan Title
p=ggplot(data=df, aes(x=reorder(pendidikan,frekuensi), y=frekuensi)) +
geom_bar(stat="identity",fill="#FFCC33",width=0.9)+
theme_minimal()+
scale_y_continuous(breaks = c(0,5000,10000,15000,20000,25000,30000),limits = c(0,30000))+
theme(
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
panel.grid.minor.y = element_blank(),
)
p=p+labs(title = "Pendidikan Pelanggan", x = "Pendidikan", y = "Jumlah", size=20)
p=p+theme(
plot.title = element_text(hjust=0.5,size=15),
axis.text.x= element_text(size=9),
axis.title.x = element_text(size=12),
axis.title.y = element_text(size=12)
)
p
Menambahkan angka dan merotasi bar chart
#Menampilkan angka pada barnya##
p+geom_text(aes(label=frekuensi), vjust=-0.5, color="black", size=3.5)
##Merotasi bar chart##
p+coord_flip()+
geom_text(aes(label=frekuensi), hjust=-0.5, color="black", size=3.5)
Multi Bar Chart
databar=data.frame(table(datax$pendidikan,datax$jeniskelamin))
names(databar)<- c("pendidikan","jeniskelamin","frekuensi")
databar
## pendidikan jeniskelamin frekuensi
## 1 DIPLOMA LAKI LAKI 7822
## 2 S1 LAKI LAKI 11582
## 3 S2/S3 LAKI LAKI 899
## 4 SD LAKI LAKI 128
## 5 SMA LAKI LAKI 23856
## 6 SMP LAKI LAKI 488
## 7 DIPLOMA PEREMPUAN 2834
## 8 S1 PEREMPUAN 4144
## 9 S2/S3 PEREMPUAN 378
## 10 SD PEREMPUAN 16
## 11 SMA PEREMPUAN 3726
## 12 SMP PEREMPUAN 127
Multi Bar Chart Sederhana
- jeniskelamin dipetakan ke sumbu X, frekuensi ke sumbu Y, dan pendidikan ke warna batang melalui fill = pendidikan.
ggplot(databar, aes(x=jeniskelamin, y=frekuensi,fill=pendidikan)) +
geom_bar(stat="identity", width=0.9)+
labs(title="Pendidikan dan Gender",x="p&G",y="jumlah")+
theme_minimal()
Kode pertama menggunakan scale_fill_manual(values = c(“blue”, “coral”)) untuk menetapkan warna secara manual, memberi kontrol penuh pada pengguna.
Kode kedua menyimpan grafik dasar ke variabel mp dan menampilkan dua variasi:
- scale_fill_brewer(palette = “Dark2”) untuk palet warna yang ramah publikasi. Sumber warna-warna pada multiple bar chart pada https://www.r-graph-gallery.com/38-rcolorbrewers-palettes.html
- scale_fill_manual(values = c(“yellow”, “blue”)) untuk efek visual yang terang dan kontras.
ggplot(data=databar, aes(x=pendidikan, y=frekuensi,fill=jeniskelamin)) +
geom_bar(stat="identity", width=0.9)+
theme_minimal()+scale_fill_manual(values=c("blue", "coral"))
mp=ggplot(data=databar, aes(x=pendidikan, y=frekuensi,fill=jeniskelamin)) +
geom_bar(stat="identity", width=0.9)+
theme_minimal()
mp+ scale_fill_brewer(palette="Dark2")
Dodge
Dodge merujuk pada teknik penempatan elemen grafik secara berdampingan (samping-sampingan) alih-alih ditumpuk, terutama untuk grafik batang (bar chart) atau kolom (column chart). Tujuan utamanya adalah membandingkan nilai antar kelompok secara lebih jelas.
ggplot(databar, aes(x=pendidikan, y=frekuensi,fill=jeniskelamin)) +
geom_bar(stat="identity",position='dodge')+
theme_minimal()
Pie Chart
Pie Chart Sederhana
Kode berikut digunakan untuk menganalisis distribusi frekuensi dari
variabel jeniskelamin
dalam dataset datax
.
Proses dimulai dengan menghitung jumlah kemunculan setiap kategori pada
variabel tersebut menggunakan fungsi table()
, lalu hasilnya
diubah menjadi data frame agar lebih mudah diolah. Nama kolom data frame
kemudian diganti menjadi “jeniskelamin” dan “frekuensi” untuk memberikan
penamaan yang lebih deskriptif. Selanjutnya, ditambahkan kolom
label
yang menunjukkan persentase tiap kategori, dihitung
dengan membagi frekuensi masing-masing kategori terhadap total
keseluruhan, dikalikan 100, dibulatkan hingga dua desimal, dan
ditambahkan simbol persen untuk keperluan tampilan. Kemudian ditambahkan
pula kolom fraction
, yaitu proporsi masing-masing kategori
dalam bentuk desimal. Hasil akhir berupa data frame yang menyajikan
informasi kategori jenis kelamin, frekuensinya, persentasenya dalam
format teks, serta proporsinya dalam bentuk numerik, yang bermanfaat
untuk visualisasi data seperti diagram batang atau lingkaran.
df2=data.frame(table(datax$jeniskelamin))
names(df2)<- c("jeniskelamin","frekuensi")
df2$label<- paste0(round((df2$frekuensi/sum(df2$frekuensi))*100,2),"%")
df2$fraction <- df2$frekuensi / sum(df2$frekuensi)
df2
## jeniskelamin frekuensi label fraction
## 1 LAKI LAKI 44775 79.96% 0.7995536
## 2 PEREMPUAN 11225 20.04% 0.2004464
Kode berikut digunakan untuk membuat visualisasi diagram lingkaran
(pie chart) berdasarkan data frekuensi kategori jenis kelamin dalam data
frame df2
. Argumen
aes(x="", y=frekuensi, fill=jeniskelamin)
menunjukkan bahwa
grafik dibentuk tanpa sumbu x (diberi string kosong), dengan tinggi
batang ditentukan oleh nilai frekuensi
, dan warna isian
(fill) berdasarkan kategori jeniskelamin
. Fungsi
geom_col(width = 1)
digunakan untuk membuat batang kolom
penuh yang akan diubah menjadi bentuk lingkaran. Transformasi ke diagram
lingkaran dilakukan melalui coord_polar("y")
, yang mengubah
koordinat batang menjadi polar (melingkar) berdasarkan sumbu y.
Terakhir, theme_void()
digunakan untuk menghilangkan
elemen-elemen latar seperti garis sumbu dan label, sehingga grafik
terlihat bersih dan fokus pada tampilan pie chart itu sendiri.
ggplot(df2, aes(x="", y=frekuensi, fill=jeniskelamin))+
geom_col(width = 1)+
coord_polar("y")+
theme_void()
Kode berikut untuk membuat pie chart yang menampilkan persentase
distribusi kategori jeniskelamin
dari data frame
df2
secara visual dengan label. Visualisasi dimulai dengan
menggunakan ggplot()
yang diatur dengan sumbu x kosong,
nilai y berdasarkan frekuensi
, dan warna isian ditentukan
oleh kategori jeniskelamin
. Fungsi geom_bar()
digunakan untuk membuat batang dengan lebar penuh
(width = 1
) dan stat = "identity"
agar tinggi
batang sesuai dengan nilai frekuensi. Argumen
position = 'fill'
membuat total batang dinormalisasi
menjadi 1, yang kemudian dikonversi menjadi pie chart melalui
coord_polar("y")
. Tampilan diperhalus dengan
theme_void()
untuk menghilangkan elemen latar belakang.
Selanjutnya, geom_text()
ditambahkan ke grafik untuk
menyisipkan label persentase dari kolom label
di tengah
setiap segmen pie. Argumen
position = position_fill(vjust = 0.5)
digunakan agar label
berada di tengah-tengah proporsi setiap kategori. Ukuran dan warna teks
juga diatur agar dapat terbaca dengan jelas. Hasil akhirnya adalah pie
chart yang tidak hanya menggambarkan proporsi kategori secara visual,
tetapi juga memberikan informasi persentase secara eksplisit pada setiap
segmen.
pie=ggplot(df2, aes(x="", y=frekuensi, fill=jeniskelamin))+
geom_bar(width = 1, stat = "identity", position = 'fill')+
coord_polar("y")+
theme_void()
pie2=pie+geom_text(aes(label = label), size=5,color = "black", position = position_fill(vjust = 0.5))
pie2
Pie Chart Modifikasi
Kode pertama berikut menambahkan skema warna menggunakan
scale_fill_brewer(palette = "Spectral")
, yang merupakan
bagian dari ColorBrewer, sebuah pustaka palet warna yang dirancang agar
mudah dibedakan dan ramah untuk keperluan visualisasi data. Palet
“Spectral” memberikan gradasi warna yang mencolok dan kontras, cocok
digunakan untuk membedakan kategori seperti jenis kelamin dalam pie
chart. Kode kedua menggunakan
scale_fill_manual(values = c("#00FFFF", "#FFFF00"))
untuk
menetapkan warna secara manual. Warna #00FFFF
(cyan) dan
#FFFF00
(kuning) digunakan untuk menggantikan warna
default, memberikan kontrol penuh kepada pengguna atas estetika visual.
Pendekatan ini berguna ketika pengguna ingin menyesuaikan warna grafik
dengan tema tertentu, misalnya untuk kebutuhan presentasi atau
publikasi.
Doughnut Chart
Kode pertama berikut digunakan untuk membuat pie chart berbentuk
donat (doughnut chart) dengan label persentase di tengah-tengah setiap
segmen. Nilai x = 2
digunakan sebagai posisi lingkaran agar
dapat disesuaikan menjadi donat menggunakan xlim(1, 3)
,
sehingga bagian tengah grafik tampak kosong. Fungsi
geom_bar()
membentuk batang yang akan diubah menjadi segmen
lingkaran melalui coord_polar("y")
. Argumen
position = "fill"
memastikan bahwa semua batang
dinormalisasi agar membentuk satu lingkaran utuh. Label persentase
ditambahkan dengan geom_text()
dan diletakkan di
tengah-tengah segmen menggunakan
position_fill(vjust = 0.5)
. theme_void()
menghapus latar belakang dan elemen sumbu untuk tampilan bersih. Kode
kedua merupakan variasi lain dari pie chart berbentuk donat, namun
labelnya ditambahkan menggunakan geom_label()
yang memberi
efek latar belakang seperti kotak pada setiap label. Selain menggunakan
posisi x = 2
dan xlim(1, 3)
untuk membentuk
lingkaran donat, kode ini menyetel letak label berdasarkan nilai
y = fraction - 0.1
, sehingga label tampil sedikit lebih
masuk ke dalam tiap segmen pie. Fungsi show.legend = FALSE
digunakan untuk menyembunyikan legenda agar grafik lebih fokus pada isi
pie chart. Pendekatan ini berguna untuk menampilkan informasi persentase
secara eksplisit dengan visual yang lebih menarik dan mudah dibaca.
ggplot(df2, aes(x=2, y=frekuensi, fill=jeniskelamin))+
geom_bar(width=1,stat = "identity", position = 'fill')+
coord_polar("y")+
theme_void()+xlim(1,3)+
geom_text(aes(label = label), size=5,color = "black", position = position_fill(vjust = 0.5))
ggplot(df2, aes(x=2, y=frekuensi, fill=jeniskelamin))+
geom_bar(width=1,stat = "identity",position="fill")+
coord_polar("y")+xlim(1,3)+
theme_void()+
geom_label(aes(y = fraction-0.1,label=label), size=4.5,color = "black", show.legend = F)
Kode
geom_label_repel()
dari paket ggrepel
untuk menambahkan label ke grafik dengan posisi yang otomatis
disesuaikan agar tidak saling tumpang tindih. Argumen
aes(y = frekuensi/2, label = label)
menentukan bahwa label
akan ditempatkan pada posisi tengah setiap batang berdasarkan nilai
frekuensi
, dengan teks diambil dari kolom
label
. Ukuran teks diatur dengan size = 4.5
,
dan warnanya ditetapkan sebagai hitam untuk memastikan keterbacaan.
Argumen nudge_x = 0.5
digunakan untuk menggeser posisi
label secara horizontal agar menjauh dari pusat grafik, terutama berguna
dalam visualisasi pie chart berbentuk donat agar label tidak berada di
dalam lingkaran. show.legend = FALSE
digunakan untuk
menyembunyikan legenda label. Dengan pendekatan ini, label ditampilkan
secara rapi dan informatif tanpa saling bertumpuk, meningkatkan kualitas
visualisasi data.
library(ggrepel)
ggplot(df2, aes(x=2, y=frekuensi, fill=jeniskelamin))+
geom_bar(width=1,stat = "identity")+
coord_polar("y")+xlim(1,3)+
theme_void()+
geom_label_repel(aes(y = frekuensi/2,label=label),
size=4.5,color = "black", show.legend = F,nudge_x = 0.5)
Doughnut dengan webr
Fungsi PieDonut()
digunakan untuk membuat visualisasi
gabungan antara pie chart dan donut chart yang menggambarkan hubungan
antara dua variabel kategorik. Visualisasi ini efektif untuk menunjukkan
proporsi secara hierarkis, dengan lingkaran luar (donut) sebagai
subdivisi dari lingkaran dalam (pie). Baris pertama
PieDonut(df2, aes(jeniskelamin, count = frekuensi))
digunakan untuk menampilkan distribusi satu variabel kategorik, yaitu
jeniskelamin
, berdasarkan frekuensinya dalam data
df2
. Baris kedua
PieDonut(datax, aes(jeniskelamin, pendidikan))
membentuk
visualisasi dua tingkat, di mana lingkaran dalam menunjukkan kategori
jeniskelamin
dan lingkaran luar menunjukkan pembagian
kategori pendidikan
dalam masing-masing kelompok jenis
kelamin. Baris ketiga
PieDonut(datax, aes(pendidikan, jeniskelamin))
membalik
urutan hierarki, sehingga lingkaran dalam menunjukkan kategori
pendidikan
, dan lingkaran luar membagi berdasarkan
jeniskelamin
. Baris keempat
PieDonut(datax, aes(pendidikan, jeniskelamin), explode = 1)
menambahkan efek explode (jarak antar segmen) pada lingkaran pie, untuk
memperjelas batas antara segmen kategori pendidikan. Baris kelima
PieDonut(datax, aes(pendidikan, jeniskelamin), explode = 1, explodeDonut = TRUE)
selain menambahkan jarak pada lingkaran pie, juga menambahkan jarak
antar segmen pada lingkaran donut, sehingga visualisasi lebih terbuka
dan perbedaan kategori lebih menonjol.
Pertama, dibuat data frame
df4
yang berisi tabulasi silang
antara variabel pendidikan
dan jeniskelamin
dari dataset datax
menggunakan fungsi table()
,
lalu dikonversi menjadi data frame dengan
stringsAsFactors = TRUE
. Nama kolom kemudian disesuaikan
menjadi 'pendidikan'
, 'JK'
, dan
'Freq'
agar lebih deskriptif. Visualisasi dilakukan dengan
PieDonut(df4, aes(JK, pendidikan, count = Freq))
, yang
menampilkan jeniskelamin
sebagai kategori pada lingkaran
pie (dalam), dan pendidikan
sebagai subkategori pada
lingkaran donut (luar). Parameter r0 = 0.5
,
r1 = 1
, dan r2 = 1.3
mengatur radius
masing-masing lapisan lingkaran, di mana r0
adalah radius
bagian kosong di tengah, r1
adalah radius pie utama, dan
r2
adalah radius donut bagian luar. Pengaturan ini
memberikan tampilan hierarki visual yang jelas dan estetis untuk
memperlihatkan distribusi proporsi secara bertingkat antar dua variabel
kategorik.
df4<-data.frame(table(datax$pendidikan,datax$jeniskelamin),stringsAsFactors = T)
colnames(df4)<-c('pendidikan','JK','Freq')
PieDonut(df4,aes(JK,pendidikan,count=Freq),r0=0.5,r1=1,r2=1.3)
Boxplot
Boxplot Sederhana
Berikut ini kode untuk membuat diagram boxplot (box-and-whisker plot)
guna menggambarkan distribusi variabel numerik lamabekerja
dari dataset datax
. Fungsi ggplot()
digunakan
untuk menginisialisasi objek grafik dengan sumbu y diisi oleh variabel
lamabekerja
, sedangkan sumbu x dikosongkan karena hanya
satu variabel yang dianalisis. Fungsi geom_boxplot()
kemudian menampilkan ringkasan lima nilai statistik penting, yaitu
minimum, kuartil pertama (Q1), median, kuartil ketiga (Q3), dan
maksimum, serta mengidentifikasi nilai pencilan (outlier) jika ada.
Visualisasi ini sangat berguna untuk melihat sebaran data, mendeteksi
keberadaan outlier, serta memahami simetri atau kemiringan distribusi
lamabekerja
.
Boxplot Modifikasi
Baris kode pertama berikut menampilkan boxplot dari variabel numerik
lamabekerja
tanpa membedakan kelompok, hanya dengan sumbu
y. Warna isi boxplot diatur menggunakan fill = "#00FFFF"
untuk memberikan tampilan yang lebih menarik secara visual. Plot ini
memberikan gambaran umum distribusi lama bekerja seluruh responden.
Baris kedua menambahkan variabel kategorik jeniskelamin
pada sumbu x, sehingga boxplot dikelompokkan berdasarkan kategori jenis
kelamin. Visualisasi ini memungkinkan perbandingan distribusi
lamabekerja
antar kelompok jeniskelamin
.Baris
ketiga memperjelas perbedaan antar kelompok jenis kelamin dengan
menambahkan parameter fill = jeniskelamin
, sehingga setiap
boxplot diwarnai sesuai kategorinya. Ini membantu mempertegas perbedaan
visual antar kelompok.Baris keempat merupakan variasi dari baris
sebelumnya, namun dengan tambahan theme_minimal()
yang
memberikan tampilan grafik yang lebih bersih dan sederhana dengan
mengurangi elemen latar belakang, sehingga fokus utama tetap pada data
yang ditampilkan. Keempat variasi ini sangat berguna untuk eksplorasi
awal dan identifikasi perbedaan distribusi berdasarkan kategori
tertentu.
ggplot(datax, aes(x=jeniskelamin, y=lamabekerja, fill=jeniskelamin)) +
geom_boxplot()+theme_minimal()
Baris kode pertama berikut menggunakan
scale_fill_brewer(palette = "Spectral")
, yaitu salah satu
palet dari ColorBrewer yang menyediakan gradasi warna beragam dengan
kontras tinggi. Palet ini sangat cocok digunakan dalam visualisasi
dengan banyak kategori atau ketika ingin menampilkan perbedaan warna
yang mencolok namun tetap estetis dan mudah dibedakan. Baris kedua
menggunakan
scale_fill_manual(values = c("#00FFFF", "#FFFF00"))
untuk
menetapkan warna isian secara manual. Dalam hal ini, warna cyan
(#00FFFF
) dan kuning (#FFFF00
) digunakan untuk
masing-masing kategori jenis kelamin. Pendekatan manual ini memberi
kontrol penuh kepada pengguna untuk menyesuaikan skema warna agar
selaras dengan tema visual atau identitas grafis tertentu.
bp=ggplot(datax, aes(x=jeniskelamin, y=lamabekerja, fill=jeniskelamin)) +
geom_boxplot()+theme_minimal()
bp + scale_fill_brewer(palette="Spectral")
Baris kode pertama menggunakan
facet_wrap(~pendidikan, scales = 'free')
yang memisahkan
grafik berdasarkan kategori variabel pendidikan
.
Masing-masing kategori ditampilkan dalam panel tersendiri yang disusun
secara melingkar (wrap), dan scales = 'free'
memungkinkan
setiap panel memiliki skala sumbu y yang berbeda sesuai dengan
distribusi datanya. Ini sangat bermanfaat ketika variasi antar kategori
cukup besar dan tidak proporsional.Baris kedua menggunakan
facet_grid(jenispekerjaan ~ pendidikan, scales = 'fixed')
,
yang membentuk susunan grid dua arah: baris berdasarkan
jenispekerjaan
dan kolom berdasarkan
pendidikan
. Dengan scales = 'fixed'
, semua
panel menggunakan skala sumbu y yang sama, sehingga memudahkan
perbandingan langsung antar kombinasi kategori. Visualisasi ini efektif
untuk mengeksplorasi interaksi antara dua variabel kategorik terhadap
distribusi lamabekerja
(atau variabel lain dalam
bp2
).
bp2=ggplot(datax, aes(x=jeniskelamin, y=lamabekerja,fill=jeniskelamin)) +
geom_boxplot()+theme_minimal()
bp2+facet_wrap(~pendidikan,scales = 'free')
Kode berikut ini digunakan untuk membuat visualisasi boxplot dari
variabel
lamabekerja
berdasarkan kategori
jeniskelamin
dalam dataset datax
, dengan
tambahan anotasi untuk menampilkan nilai outlier secara langsung di
grafik. Visualisasi diawali dengan ggplot()
dan
geom_boxplot()
untuk menampilkan distribusi data
lamabekerja
per kategori jenis kelamin, termasuk nilai
minimum, kuartil, median, dan maksimum. Tema
theme_minimal()
digunakan untuk memberikan tampilan grafik
yang bersih dan sederhana, menghilangkan elemen-elemen visual yang tidak
penting agar fokus tetap pada isi grafik. Fungsi
stat_summary()
ditambahkan untuk menyisipkan teks ke dalam
grafik berdasarkan ringkasan statistik. Di dalamnya, digunakan fungsi
boxplot.stats(y)$out
untuk mengambil nilai outlier dari
data. Jika tidak ada outlier, maka label tidak akan ditampilkan
(NA
). Nilai-nilai outlier tersebut dibulatkan satu desimal
dan ditampilkan sebagai label teks di sekitar titik outlier. Argumen
hjust = -1
menggeser posisi teks ke kiri agar tidak menimpa
titik data. Dengan pendekatan ini, grafik tidak hanya menampilkan
sebaran data, tetapi juga menyoroti dan memberi informasi eksplisit
mengenai nilai-nilai outlier yang terdeteksi.
ggplot(datax, aes(x=jeniskelamin, y=lamabekerja)) +
geom_boxplot() +
theme_minimal()+
stat_summary(
aes(label = round(stat(y), 1)),
geom = "text",
fun = function(y) { o <- boxplot.stats(y)$out; if(length(o) == 0) NA else o },
hjust = -1
)
Histogram
Histogram Sederhana
Kedua baris kode berikut ini digunakan untuk membuat visualisasi
distribusi dari variabel numerik lamabekerja
dalam bentuk
histogram menggunakan ggplot2
. Baris pertama menggunakan
geom_bar()
yang secara default menghitung frekuensi
berdasarkan jumlah kasus per nilai unik, dan ditambahkan fungsi
stat_bin(bins = 10)
untuk mengatur jumlah interval (bin)
sebanyak 10. Meskipun geom_bar()
umumnya digunakan untuk
data kategorik, ketika digunakan bersama stat_bin()
, fungsi
ini dapat mengelompokkan data numerik ke dalam kelas-kelas tertentu
secara otomatis.Baris kedua menggunakan
geom_histogram(bins = 20)
yang secara eksplisit membentuk
histogram dengan 20 kelas. Histogram ini lebih sesuai untuk
menggambarkan distribusi data kontinu seperti lamabekerja
,
karena geom_histogram()
secara langsung menghitung dan
menampilkan jumlah observasi dalam setiap kelas yang ditentukan. Tema
theme_minimal()
diterapkan untuk menyederhanakan tampilan
grafik, memberikan kesan visual yang bersih dan modern.Kedua grafik ini
berguna untuk mengidentifikasi pola distribusi data, seperti simetri,
kemencengan, atau keberadaan data ekstrem pada variabel
lamabekerja
.
Histogram Modifikasi
Kedua kode berikut ini digunakan untuk membuat histogram dari
variabel lamabekerja
dalam dataset datax
,
dengan pendekatan visual yang berbeda untuk menampilkan distribusi data.
Pada baris pertama, histogram dibentuk menggunakan
geom_histogram()
dengan jumlah kelas (bins) sebanyak 30.
Warna batas antar batang diatur hitam (color = "black"
),
sedangkan warna isi batang biru dengan transparansi 20%
(fill = "blue"
, alpha = 0.2
). Transparansi ini
berguna agar histogram terlihat ringan dan tidak terlalu dominan,
terutama jika nantinya dikombinasikan dengan elemen visual lain. Tema
theme_minimal()
digunakan untuk menyederhanakan tampilan
grafik agar lebih bersih. Baris kedua membentuk histogram yang tidak
lagi menampilkan frekuensi absolut, melainkan menampilkan
kepadatan data (aes(y = ..density..)
),
yang merupakan pendekatan umum dalam analisis distribusi probabilitas.
Warna batas batang tetap hitam dan isinya diwarnai dengan cyan
(fill = "#00FFFF"
), tanpa transparansi. Penggunaan
..density..
pada sumbu y memungkinkan integrasi histogram
dengan kurva distribusi teoretis seperti distribusi normal, jika
diperlukan. Perbedaan utama antara keduanya adalah bahwa histogram
pertama menampilkan jumlah observasi di setiap kelas,
sedangkan histogram kedua menampilkan nilai densitas
yang dapat ditafsirkan dalam konteks distribusi probabilitas.
ggplot(datax, aes(x=lamabekerja)) +
geom_histogram(bins=30,color="black",fill="blue",alpha=0.2)+
theme_minimal()
ggplot(datax, aes(x=lamabekerja)) +
geom_histogram(aes(y=..density..),color="black",fill="#00FFFF",bins=30)+
theme_minimal()
Rangkaian kode berikut ini digunakan untuk membuat visualisasi
distribusi variabel lamabekerja
dalam bentuk histogram yang
dipadukan dengan kurva densitas, serta diperluas dengan faceting
berdasarkan kategori pendidikan
. Langkah pertama membuat
objek hp
, yaitu histogram dari variabel
lamabekerja
yang menampilkan nilai kepadatan (density) pada
sumbu y. Histogram dibuat menggunakan geom_histogram()
dengan jumlah kelas sebanyak 30, warna batas batang hitam, dan isian
cyan (#00FFFF
). Tema theme_minimal()
digunakan
untuk memberikan tampilan bersih dan sederhana. Langkah kedua membentuk
objek hp2
dengan menambahkan geom_density()
ke
histogram. Kurva densitas ini digambar dengan garis berwarna hitam dan
ketebalan sedang (size = 0.9
), yang membantu
mengilustrasikan pola distribusi data secara lebih halus dan kontinu di
atas histogram. Hasil visualisasi ini memberikan informasi visual
tentang bentuk distribusi data lamabekerja
, seperti apakah
simetris, miring, atau multimodal. Langkah ketiga membuat objek
hp3
dengan menambahkan
facet_wrap(~pendidikan, scales = "fixed", nrow = 3, ncol = 2)
ke hp2
, yang memecah histogram dan kurva densitas ke dalam
panel-panel berdasarkan kategori pendidikan
. Pengaturan
scales = "fixed"
menjaga agar skala sumbu y tetap konsisten
di semua panel, sehingga memudahkan perbandingan antar kategori.
Parameter nrow
dan ncol
mengatur tata letak
panel menjadi 3 baris dan 2 kolom.
hp=ggplot(datax, aes(x=lamabekerja)) +
geom_histogram(aes(y=..density..),color="black",fill="#00FFFF",bins=30)+
theme_minimal()
hp2=hp+geom_density(color="black",size=0.9)
hp2
Density Plot
Density Plot Sederhana
Rangkaian kode ini digunakan untuk membuat visualisasi kurva
kepadatan (density plot) dari variabel numerik
lamabekerja
dalam dataset datax
, yang berguna
untuk menggambarkan bentuk distribusi data secara halus dan kontinu.
Objek gd
didefinisikan sebagai plot dasar dengan sumbu x
berisi lamabekerja
. Baris pertama menambahkan
geom_density()
untuk menggambar kurva densitas berwarna
hitam dengan isian berwarna abu-abu (fill = "gray"
).
Argumen outline.type = "upper"
digunakan untuk menampilkan
garis luar pada bagian atas kurva, namun perlu dicatat bahwa
outline.type
bukan argumen standar
geom_density()
— ini kemungkinan keliru atau berasal dari
konteks fungsi lain seperti geom_violin()
.
Baris kedua menggunakan stat_density()
sebagai
alternatif dari geom_density()
yang memberikan hasil
serupa, yaitu menampilkan kurva distribusi berdasarkan estimasi kernel
density dari data. Baris ketiga menggabungkan beberapa elemen visual:
geom_density()
dengan garis luar penuh
(outline.type = "full"
) untuk menampilkan seluruh kontur
distribusi, dan geom_vline()
untuk menambahkan garis
vertikal pada nilai rata-rata lamabekerja
. Garis rata-rata
ditampilkan dengan warna oranye kemerahan (#FC4E07
), garis
putus-putus (linetype = "dashed"
), dan ketebalan garis
size = 1
. Penambahan garis ini memberikan penekanan visual
terhadap posisi rata-rata pada kurva distribusi.
gd<-ggplot(datax, aes(x = lamabekerja))
gd+geom_density(color = "black", fill = "gray",outline.type = "upper")
gd+geom_density(color = "black", fill = "gray",outline.type = "full")+
geom_vline(aes(xintercept=mean(lamabekerja)),color="#FC4E07", linetype="dashed", size=1)
Density Plot Modifikasi
Rangkaian kode ini digunakan untuk membuat visualisasi kurva
kepadatan (density plot) dari data simulasi dataku
, yang
terdiri dari 200 observasi dengan dua kategori jenis kelamin
(JK
) dan variabel numerik bobot
. Data
disimulasikan menggunakan distribusi normal, dengan rata-rata 55 untuk
perempuan (F
) dan 58 untuk laki-laki (M
).
Objek dasar gd2
didefinisikan menggunakan
ggplot()
dengan sumbu x berisi nilai
bobot
.
set.seed(1234)
dataku = data.frame(
JK = factor(rep(c("F", "M"), each=100)),
bobot = c(rnorm(100, 55), rnorm(100, 58)))
dataku
## JK bobot
## 1 F 53.79293
## 2 F 55.27743
## 3 F 56.08444
## 4 F 52.65430
## 5 F 55.42912
## 6 F 55.50606
## 7 F 54.42526
## 8 F 54.45337
## 9 F 54.43555
## 10 F 54.10996
## 11 F 54.52281
## 12 F 54.00161
## 13 F 54.22375
## 14 F 55.06446
## 15 F 55.95949
## 16 F 54.88971
## 17 F 54.48899
## 18 F 54.08880
## 19 F 54.16283
## 20 F 57.41584
## 21 F 55.13409
## 22 F 54.50931
## 23 F 54.55945
## 24 F 55.45959
## 25 F 54.30628
## 26 F 53.55180
## 27 F 55.57476
## 28 F 53.97634
## 29 F 54.98486
## 30 F 54.06405
## 31 F 56.10230
## 32 F 54.52441
## 33 F 54.29056
## 34 F 54.49874
## 35 F 53.37091
## 36 F 53.83238
## 37 F 52.81996
## 38 F 53.65901
## 39 F 54.70571
## 40 F 54.53410
## 41 F 56.44950
## 42 F 53.93136
## 43 F 54.14464
## 44 F 54.71938
## 45 F 54.00566
## 46 F 54.03149
## 47 F 53.89268
## 48 F 53.74801
## 49 F 54.47617
## 50 F 54.50315
## 51 F 53.19397
## 52 F 54.41792
## 53 F 53.89111
## 54 F 53.98504
## 55 F 54.83769
## 56 F 55.56306
## 57 F 56.64782
## 58 F 54.22665
## 59 F 56.60591
## 60 F 53.84219
## 61 F 55.65659
## 62 F 57.54899
## 63 F 54.96524
## 64 F 54.33037
## 65 F 54.99240
## 66 F 56.77708
## 67 F 53.86139
## 68 F 56.36783
## 69 F 56.32956
## 70 F 55.33647
## 71 F 55.00689
## 72 F 54.54453
## 73 F 54.63348
## 74 F 55.64829
## 75 F 57.07027
## 76 F 54.84660
## 77 F 53.60930
## 78 F 54.27642
## 79 F 55.25826
## 80 F 54.68294
## 81 F 54.82221
## 82 F 54.83001
## 83 F 53.62770
## 84 F 54.82621
## 85 F 55.85023
## 86 F 55.69761
## 87 F 55.55000
## 88 F 54.59727
## 89 F 54.80841
## 90 F 53.80547
## 91 F 54.94684
## 92 F 55.25520
## 93 F 56.70596
## 94 F 56.00151
## 95 F 54.50442
## 96 F 55.35555
## 97 F 53.86539
## 98 F 55.87820
## 99 F 55.97292
## 100 F 57.12112
## 101 M 58.41452
## 102 M 57.52528
## 103 M 58.06599
## 104 M 57.49752
## 105 M 57.17400
## 106 M 58.16699
## 107 M 57.10374
## 108 M 58.16819
## 109 M 58.35497
## 110 M 57.94789
## 111 M 57.80407
## 112 M 57.35093
## 113 M 56.89023
## 114 M 58.84927
## 115 M 58.02236
## 116 M 58.83114
## 117 M 56.75571
## 118 M 58.16903
## 119 M 58.67317
## 120 M 57.97372
## 121 M 57.80861
## 122 M 57.21809
## 123 M 60.05816
## 124 M 58.75050
## 125 M 59.82421
## 126 M 58.08006
## 127 M 57.36859
## 128 M 56.48671
## 129 M 57.36390
## 130 M 58.22630
## 131 M 59.01369
## 132 M 58.25275
## 133 M 56.82805
## 134 M 58.66871
## 135 M 56.34990
## 136 M 57.63415
## 137 M 57.68388
## 138 M 56.05175
## 139 M 58.92006
## 140 M 57.37713
## 141 M 57.66596
## 142 M 59.39515
## 143 M 58.63667
## 144 M 57.89157
## 145 M 58.51376
## 146 M 58.39927
## 147 M 59.66286
## 148 M 58.27589
## 149 M 58.50627
## 150 M 58.34755
## 151 M 57.62276
## 152 M 58.09762
## 153 M 59.63874
## 154 M 57.12441
## 155 M 58.12176
## 156 M 59.36213
## 157 M 57.76538
## 158 M 56.94662
## 159 M 57.13022
## 160 M 57.60987
## 161 M 57.15265
## 162 M 57.73936
## 163 M 57.58558
## 164 M 57.81695
## 165 M 58.40706
## 166 M 58.62463
## 167 M 59.67821
## 168 M 57.93131
## 169 M 57.67916
## 170 M 59.47101
## 171 M 59.70433
## 172 M 58.04324
## 173 M 57.66734
## 174 M 56.17776
## 175 M 59.41126
## 176 M 57.16242
## 177 M 56.87624
## 178 M 61.04377
## 179 M 58.23502
## 180 M 57.96674
## 181 M 55.26778
## 182 M 57.90021
## 183 M 58.97603
## 184 M 58.41387
## 185 M 58.91232
## 186 M 59.98373
## 187 M 59.16911
## 188 M 57.49126
## 189 M 58.70418
## 190 M 57.80158
## 191 M 57.46193
## 192 M 55.14424
## 193 M 57.21035
## 194 M 58.48781
## 195 M 60.16803
## 196 M 58.50069
## 197 M 58.62021
## 198 M 57.03410
## 199 M 58.16265
## 200 M 55.92176
Baris pertama menambahkan geom_density()
dengan isian
berwarna biru dan transparansi 40% (alpha = 0.4
). Kurva ini
menggambarkan distribusi keseluruhan data bobot
tanpa
membedakan jenis kelamin. Catatan: argumen
outline.type = 'full'
bukan argumen valid dalam
geom_density()
dan bisa diabaikan atau dianggap berasal
dari konteks fungsi lain. Baris kedua membuat kurva kepadatan terpisah
untuk setiap kategori JK
, dengan warna garis berbeda untuk
masing-masing kategori melalui aes(color = JK)
. Pendekatan
ini menekankan perbedaan bentuk distribusi antara kelompok laki-laki dan
perempuan.
Baris ketiga menggunakan aes(fill = JK)
untuk mewarnai
area bawah kurva berdasarkan kategori JK
, dikombinasikan
dengan transparansi (alpha = 0.4
) agar tumpang tindih antar
kurva tetap terlihat. Ini memberikan visualisasi yang informatif dan
menarik secara estetis. Baris keempat menambahkan elemen garis rata-rata
keseluruhan data bobot
menggunakan
geom_vline()
, dengan garis putus-putus berwarna jingga
kemerahan (#FC4E07
). Ini membantu menunjukkan posisi nilai
rata-rata secara visual terhadap distribusi dari masing-masing
kelompok.
gd2 + geom_density(aes(fill = JK),outline.type = 'full',alpha=0.4)+
geom_vline(data=dataku,aes(xintercept=mean(bobot)),color="#FC4E07", linetype="dashed", size=1)
Penggabungan Grafik
Kode berikut ini bertujuan untuk membandingkan berbagai tampilan
visual dari grafik ggplot2
dengan menerapkan beberapa tema
yang berbeda pada dataset mtcars
. Setiap objek
a
hingga g
mewakili satu jenis plot dengan
variasi elemen grafis dan tema yang diterapkan.
Objek
a
merupakan scatter plot sederhana yang menampilkan hubungan antara variabelwt
(berat mobil) danmpg
(efisiensi bahan bakar dalam mil per galon), menggunakan pengaturan default tanpa tema tambahan.Objek
b
menggunakangeom_line()
untuk menggambarkan garis hubungan antar titik data, dengan penerapan tematheme_bw()
yang memberikan latar putih bersih dengan garis grid abu-abu.Objek
d
menggambarkan distribusi dari variabelwt
dalam bentuk kurva kepadatan (density plot), dengan isian biru transparan dan menggunakantheme_classic()
, yang memberikan tampilan klasik dengan garis sumbu yang sederhana.Objek
e
adalah histogram dari variabelmpg
, berwarna hijau transparan, dengan jumlah kelas (bin) sebanyak 30. Tematheme_cowplot()
digunakan untuk memberikan tampilan minimalis yang cocok untuk publikasi.Objek
f
menampilkan scatter plot dengan titik-titik berwarna putih dan menggunakantheme_dark()
untuk memberikan latar belakang hitam yang kontras, cocok untuk visualisasi di layar.Objek
g
kembali menampilkan scatter plot dengantheme_minimal()
untuk menghasilkan tampilan yang bersih dan modern dengan penghilangan elemen grafis yang tidak penting.
Akhirnya, semua grafik tersebut digabungkan dalam satu tampilan
menggunakan fungsi plot_grid()
dari paket
cowplot
. Fungsi ini menyusun keenam grafik dalam layout 3
kolom dan 2 baris (ncol = 3, nrow = 2
), dan memberi label
pada masing-masing panel dengan teks berwarna ungu
(label_colour = "purple"
) dan ukuran huruf 12. Pengaturan
hjust = -0.9
digunakan untuk mengatur posisi horizontal
label agar lebih simetris. Visualisasi ini sangat berguna untuk
membandingkan dampak estetika dari berbagai tema ggplot2
terhadap data yang sama.
a<-ggplot(data = mtcars, aes(x = wt, y = mpg))+geom_point()
b<-ggplot(data = mtcars, aes(x = wt, y = mpg))+geom_line()+theme_bw()
d<-ggplot(data = mtcars, aes(x = wt))+geom_density(fill='blue',alpha=0.4,outline.type = "full")+theme_classic()
e<-ggplot(data = mtcars, aes(x = mpg))+geom_histogram(fill='green',alpha=0.2,bins=30)+theme_cowplot()
f<-ggplot(data = mtcars, aes(x = wt, y = mpg))+geom_point(color="white")+
theme_dark()
g<-ggplot(data = mtcars, aes(x = wt, y = mpg))+geom_point()+theme_minimal()
plot_grid(a,b,d,e,f,g, labels = c("Default", "theme_bw",
"theme_classic","theme_cowplot","theme_dark","theme_minimal"),
ncol = 3, nrow = 2,label_size = 12,hjust = -0.9,label_colour = "purple")