Visualisasi Data Menggunakan Library ggplot2

Author

Rafiqah Hasna S

Import Library

library(tidyverse)
library(ggridges)
library(plotly)
library(GGally)

10 Merk Mobil dengan Rata-rata Jarak Tempuh Perkotaan Tertinggi

ctyAvg = mpg %>%
  group_by(manufacturer) %>%
  summarise(avg = mean(cty)) %>%
  arrange(avg) %>%
  top_n(10)

ggplot(data=ctyAvg,aes(y = reorder(manufacturer, avg), x = avg, fill=reorder(manufacturer, avg))) + 
  geom_col(alpha = 0.6) + 
  scale_fill_viridis_d(option="inferno",direction=-1, begin=0.1,end=0.5) + 
  theme(legend.position = "none", axis.text.y=element_text(size=rel(1.1))) + 
  labs(x="Rata-rata Jarak Tempuh Perkotaan (mpg)", y="Merk Mobil", title="10 Merk Mobil dengan Rata-rata Jarak Tempuh Perkotaan Tertinggi") 

Rata-rata 10 merek dengan jarak tempuh tertinggi tidak berbeda jauh satu sama lain. Merk mobil dengan jarak tempuh tertinggi adalah honda dengan rata-rata 24,4 mpg (miles per gallon) dan merk dengan jarak tempuh terendah adalah ford dengan rata-rata 14 mpg.

Distribusi Nilai Karat Berlian Berdasarkan Kualitas Potongan

ggplot(diamonds, aes(x = cut,y=carat, fill=cut)) +
  geom_boxplot(
    outlier.size = 1,
    alpha = 0.6
  ) + labs(x="Jenis Potongan", y="Karat") + theme(legend.position = "none") + ggtitle("Distribusi Nilai Karat Berlian Berdasarkan Kualitas Potongan")

Distribusi karat berlian pada setiap jenis potongan cenderung menjulur ke kanan (positively skewed) dengan median karat berkisar antara 0,5 sampai 1. Karat adalah satuan massa berlian dengan 1 karat setara dengan 200 mg. Jenis potongan fair cenderung memiliki massa yang lebih berat daripada potongan lainnya. Berlian yang paling ringan jika dilihat dari nilai kuartil adalah berlian dengan jenis potongan ideal.

Hubungan Nilai Karat dengan Harga Berlian

set.seed(123)
diamonds_sample <- diamonds |>
  slice_sample(n = 3000)

diamonds_sample = diamonds_sample %>%
  mutate(clarity_new = case_when(
    clarity == "I1" ~ "Included",
    clarity == "SI1" | clarity == "SI2" ~ "Slightly Included",
    clarity == "VS1" | clarity == "VS2" ~ "Very Slightly Included",
    clarity == "VVS1" | clarity == "VVS2" ~ "Very Very Slightly Included",
    clarity == "IF" ~ "Internally Flawless",
  ))

diamonds_sample$clarity_new = factor(diamonds_sample$clarity_new, levels = c("Included", "Slightly Included", "Very Slightly Included", "Very Very Slightly Included", "Internally Flawless"))

ggplot(data = diamonds_sample,
       aes(x = carat,
           y = price,
           color = clarity_new,
           )) + xlim(0,3) +
  geom_point(alpha = 0.1) +
  scale_color_brewer(palette = "RdYlGn") + geom_smooth(se=FALSE) + labs(x="Karat", y="Harga Berlian (USD)", color="Kejernihan") + guides(colour = guide_legend(reverse=T)) + ggtitle("Hubungan Nilai Karat dengan Harga Berlian") + 
  theme(legend.position = "none")

Harga berlian secara umum meningkat secara eksponensial seiring meningkatnya nilai karat, kecuali berlian dengan tingkat kejernihan included. Berlian tipe included relatif lebih murah dengan harga yang meningkat secara linear. Tingkat kejernihan included artinya masih terdapat udara atau kandungan non-berlian lain yang terperangkap di dalam berlian tersebut. Semakin baik tingkat kejernihan berlian, harga berlian semakin mahal dan harga melesat semakin cepat.

Perubahan Persentase Tabungan Pribadi dari Waktu ke Waktu

ggplot(data = economics,
aes(x = date,
y = psavert)) +
geom_line(linewidth = 0.5, color="darkred") + annotate("rect", xmin = as.Date("2000-01-01"), xmax = as.Date("2010-01-01"), ymin=1.5, ymax = 8.8,
  alpha = .05, fill="darkred") + annotate("text", x=as.Date("2005-01-01"), y = 9.8, label= "Dekade dengan\npersentase terendah", size=3, col="#550010") + labs(x="Tahun", y="Persentase Tabungan Pribadi (%)", title="Perubahan Persentase Tabungan Pribadi dari Waktu ke Waktu")

Persentasi tabungan pribadi (personal saving rate) adalah perbandingan besar pendapatan yang dapat ditabung oleh seseorang terhadap pendapatan pribadi yang sudah dipotong pajak. Semakin rendah persentasenya, semakin sedikit uang yang dapat ditabung. Persentase tabungan pribadi terlihat menurun dari tahun ke tahun sejak 1970 dengan penurunan terparah yang terjadi pada tahun 2000-2010. Hal ini kemungkinan disebabkan oleh resesi yang terjadi pada dekade tersebut.

Memperbaiki Visualisasi Data

state = as.data.frame(state.x77)
state$hs = state.x77[,"HS Grad"]
ggplot(state, aes(x=hs,y=Illiteracy)) + geom_line() + ggtitle("Hubungan Angka Buta Huruf dengan Persentase Penduduk Tamat SMA\ndi Amerika Serikat")

Kesalahan utama pada grafik di atas adalah jenis grafik yang dipilih. Diagram garis yang menghubungi titik-titik koordinat biasanya digunakan untuk melihat tren waktu, bukan untuk membandingkan dua variabel numerik. Grafik diatas juga tidak terlihat menarik dan informasi yang diberikan belum lengkap.

state = as.data.frame(state.x77)
state$hs = state.x77[,"HS Grad"]/100
state$Illiteracy = state$Illiteracy/100

ggplot(state, aes(x=hs,y=Illiteracy)) + 
  theme_light() +
  geom_point(col="#2A6BA6", alpha=0.4) + 
  geom_vline(xintercept=mean(state$hs), col="#698F3B",linetype="dashed", linewidth=0.7) +
  geom_hline(yintercept=mean(state$Illiteracy), col="#91324F",linetype="dashed", linewidth=0.7) +
  geom_smooth(alpha = 0.04, method = 'loess', formula = 'y ~ x',col="#2A6BA6", fill= "#2A6BA6",linewidth=1.4) +
  scale_y_continuous(breaks = seq(0,0.03, length.out = 7),labels = scales::percent) +
  scale_x_continuous(breaks = seq(0.35,0.7, length.out = 8),labels = scales::percent) +
  ggtitle("Hubungan Angka Buta Huruf dengan Persentase\n Penduduk Tamat SMA di Amerika Serikat\n") +
  theme(plot.title = element_text(hjust = 0.5, face="bold"), 
        axis.title.x = element_text(size=10,margin = margin(10,0,0,0)), 
        axis.title.y = element_text(size=10,margin = margin(0,10,0,0))) +
   labs(y="Persentase Penduduk Buta Huruf", x="Persentase Penduduk Tamat SMA") +
  annotate("text", x=0.525, y =0.026, label= paste(round(mean(state$hs)*100,1),"%"),col="#698F3B", size=3.2, angle = 90) +
  annotate("text", x=0.67, y =0.0128, label= paste(round(mean(state$Illiteracy)*100,1),"%"),col="#91324F", size=3.2) 

Scatterplot adalah grafik yang tepat untuk melihat hubungan antara dua variabel numerik. Garis pendekatan yang dibentuk dengan geom_smooth() ditambahkan agar pola hubungan antara dua variabel terlihat lebih jelas. Titk dan garis diberi warna biru agar tidak terlalu mencolok tetapi tetap terlihat menarik. Garis vertikal dan horizontal rata-rata masing-masing variabel ditambahkan untuk menambahkan informasi pada grafik. Selain itu, label pada sumbu x dan sumbu y diperjelas dengan menambahkan satuan persen (%).