Tugas Praktikum Visualisasi Data 16 Sept 2026

Author

Nurhalimah

Published

24 September 2026

Independent Exercise

1. Comparison — Data

Calculate the average cty for each manufacturer, select the top 10, create a comparison plot, and summarize the main finding.

Code
#Persiapan Dokumen (Setup & Library)
library(tidyverse)
library(ggridges)
library(scales)
library(ggrepel)

# 1. Agregasi data: Menghitung rata-rata cty dan mengambil top 10 produsen
top10_mfg <- mpg %>%
  group_by(manufacturer) %>%
  summarise(mean_cty = mean(cty), .groups = "drop") %>%
  slice_max(mean_cty, n = 10)

# 2. Visualisasi Lollipop Chart terurut
ggplot(top10_mfg, aes(x = reorder(manufacturer, mean_cty), y = mean_cty)) +
  geom_segment(aes(xend = reorder(manufacturer, mean_cty), y = 0, yend = mean_cty),
               color = "steelblue", linewidth = 0.8) +
  geom_point(color = "steelblue", size = 3.5) +
  coord_flip() +
  scale_y_continuous(limits = c(0, 30), breaks = seq(0, 30, 5)) +
  labs(
    title = "Top 10 Produsen Mobil Berdasarkan Efisiensi Bahan Bakar Kota",
    subtitle = "Diurutkan dari rata-rata efisiensi kota tertinggi",
    x = NULL,
    y = "Rata-rata Konsumsi Bahan Bakar Kota (mpg)"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold", size = 12),
    axis.text = element_text(size = 10)
  )

Interpretasi:

  • Produsen Honda dan Volkswagen menempati urutan teratas dalam efisiensi konsumsi bahan bakar di dalam kota (cty), dengan rata-rata melebihi 20 mpg.

  • Sebaliknya, pabrikan asal Amerika Serikat seperti Dodge dan Lincoln tidak masuk ke dalam 10 besar efisiensi kota karena didominasi oleh kendaraan bermesin silinder besar dan kapasitas mesin tinggi.

2. Distribution — Data

Choose one numerical variable, compare its distribution across one categorical variable, improve the plot appearance, and interpret the pattern.

Code
# Visualisasi distribusi harga (price) menurut kualitas potongan (cut)
ggplot(diamonds, aes(x = cut, y = price, fill = cut)) +
  geom_violin(alpha = 0.6, show.legend = FALSE, trim = FALSE) +
  geom_boxplot(width = 0.12, outlier.shape = NA, alpha = 0.8, fill = "white") +
  scale_fill_viridis_d() +
  scale_y_continuous(labels = comma, limits = c(0, 20000), breaks = seq(0, 20000, 5000)) +
  labs(
    title = "Distribusi Harga Berlian Berdasarkan Kualitas Potongan (Cut)",
    subtitle = "Kombinasi violin plot dan boxplot untuk melihat sebaran dan kuartil",
    x = "Kualitas Potongan",
    y = "Harga (USD)"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold", size = 12),
    axis.title = element_text(size = 10, face = "bold")
  )

Interpretasi:

  • Distribusi harga pada seluruh kategori potongan berlian memiliki kemencengan positif (right-skewed), di mana sebagian besar berlian terkonsentrasi pada harga di bawah 5.000 USD.

  • Menariknya, median harga berlian dengan potongan berkualitas Ideal justru sedikit lebih rendah dibandingkan potongan Fair atau Good. Hal ini terjadi karena berlian berpotongan Ideal banyak yang memiliki ukuran karat (carat) kecil.

3. Relationship — Data

Visualize the relationship between carat and price, add at least one relevant asthetic, apply suitable customization, and explain the relationship shown.

Code
# 1. Menyiapkan sampel 3000 data
set.seed(123)
diamonds_sample <- diamonds %>% slice_sample(n = 3000)

# 2. Scatter plot hubungan berat dan harga dengan warna berdasarkan cut
ggplot(diamonds_sample, aes(x = carat, y = price, color = cut)) +
  geom_point(alpha = 0.5, size = 2) +
  geom_smooth(method = "gam", formula = y ~ s(x, bs = "cs"), se = FALSE, color = "black", linewidth = 0.8) +
  scale_color_viridis_d() +
  scale_y_continuous(labels = comma, breaks = seq(0, 20000, 5000)) +
  scale_x_continuous(breaks = seq(0, 3, 0.5)) +
  guides(color = guide_legend(override.aes = list(size = 4, alpha = 1))) +
  labs(
    title = "Pola Hubungan Berat Karat dan Harga Berlian",
    subtitle = "Dilengkapi garis tren penghalus nonlinier (GAM) dan pemetaan kualitas potongan",
    x = "Berat Berlian (Carat)",
    y = "Harga (USD)",
    color = "Kualitas Potongan"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold", size = 12),
    legend.position = "right"
  )

Interpretasi:

  • Terdapat hubungan nonlinier positif yang sangat kuat antara berat berlian (carat) dan harga (price); pertambahan karat meningkatkan harga secara eksponensial di awal, kemudian cenderung melandai pada karat di atas 2.

  • Pada bobot karat yang setara, berlian dengan kualitas potongan Ideal (kuning) umumnya berada di lapisan harga atas dibandingkan potongan Fair (ungu).

4. Time Series — Data

Visualize psavert over time, use clear labels and a suitable theme, highlight or annotate a noticeable change, and provide ia short interpretation.

Code
# Visualisasi tingkat tabungan pribadi (psavert) dengan garis acuan dan anotasi
ggplot(economics, aes(x = date, y = psavert)) +
  geom_line(color = "steelblue", linewidth = 0.8) +
  geom_hline(yintercept = 5, linetype = "dashed", color = "firebrick") +
  annotate("text", x = as.Date("2005-01-01"), y = 3.2, 
           label = "Titik Terendah Sejarah (2005)\nSaving Rate < 5%", 
           color = "firebrick", size = 3, fontface = "bold") +
  annotate("point", x = as.Date("2005-07-01"), y = 2.2, color = "firebrick", size = 3) +
  scale_y_continuous(labels = function(x) paste0(x, "%"), limits = c(0, 18), breaks = seq(0, 18, 3)) +
  scale_x_date(date_breaks = "5 years", date_labels = "%Y") +
  labs(
    title = "Perkembangan Tingkat Tabungan Pribadi AS (1967–2015)",
    subtitle = "Personal Savings Rate (psavert) menunjukkan tren penurunan jangka panjang",
    x = "Tahun Pengamatan",
    y = "Tingkat Tabungan (%)"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold", size = 12),
    axis.title = element_text(size = 10, face = "bold")
  )

Interpretasi:

  • Tingkat tabungan masyarakat Amerika Serikat mengalami tren penurunan sekuler dari sekitar 13–14% pada dekade 1970-an menjadi di bawah 5% pada pertengahan dekade 2000-an.

  • Titik terendah tabungan terjadi menjelang krisis keuangan global 2008 (sekitar tahun 2005 di angka 2,2%), sebelum kembali mengalami pemulihan moderat pasca-krisis.

5. Improve a Visualization

Create one visualization with at least three presentation problems, then redesign it using improvements such as color, theme, scale, labels, legend, or annotation, and briefly explain the changes.

A. Membuat Visualisasi dengan 3 Masalah Penyajian:

  1. Truncated Y-axis (skala dimulai dari angka 70 sehingga perbedaan magnitudo terdistorsi secara manipulatif).

  2. Warna kategori acak yang mencolok dan tidak memiliki makna informasi (visual clutter).

  3. Label sumbu tidak deskriptif dan orientasi label horizontal saling bertumpuk.

Code
# Data contoh ringkasan
df_bad <- mpg %>%
  filter(class %in% c("compact", "suv", "pickup")) %>%
  group_by(class) %>%
  summarise(mean_hwy = mean(hwy), .groups = "drop")

# Grafik Buruk (Sebelum Perbaikan)
plot_bad <- ggplot(df_bad, aes(x = class, y = mean_hwy, fill = class)) +
  geom_col() +
  coord_cartesian(ylim = c(15, 30)) +  # Masalah 1: Sumbu Y dipotong
  scale_fill_manual(values = c("magenta", "cyan", "yellow")) + # Masalah 2: Warna gonjreng tanpa makna
  labs(title = "plot efisiensi", x = "cls", y = "val") # Masalah 3: Label mentah & tidak jelas

# Tampilkan grafik 
plot_bad

B. Desain Ulang Visualisasi (Sesudah Perbaikan)

Code
# Grafik Diperbaiki
plot_good <- ggplot(df_bad, aes(x = reorder(class, mean_hwy), y = mean_hwy)) +
  geom_col(fill = "steelblue", width = 0.6) + # Solusi 2: Warna monokromatik profesional
  coord_flip() + # Solusi 3: Mudah dibaca
  scale_y_continuous(limits = c(0, 32), breaks = seq(0, 30, 5)) + # Solusi 1: Sumbu Y mulai dari 0
  labs(
    title = "Perbandingan Efisiensi Bahan Bakar Jalan Raya",
    subtitle = "Skala sumbu dimulai dari 0 untuk menjaga integritas perbandingan",
    x = "Kelas Kendaraan",
    y = "Rata-rata Konsumsi Bahan Bakar (mpg)"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold", size = 12),
    panel.grid.minor = element_blank()
  )

# Tampilkan grafik 
plot_good

Penjelasan Perubahan Teknis:

  • Skala Sumbu: Sumbu Y dikembalikan mulai dari angka 0 menggunakan scale_y_continuous(limits = c(0, 32)) agar rasio panjang batang mencerminkan nilai data yang sebenarnya tanpa ilusi pembesaran selisih.

  • Skema Warna: Palet warna warna-warni yang mengganggu diganti dengan satu warna netral seragam ("steelblue"), karena kategori sudah terpisah secara fisik pada sumbu kategori.

  • Keterbacaan Label & Orientasi: Variabel diurutkan menggunakan reorder(), posisi diputar horizontal dengan coord_flip(), serta judul dan satuan ukuran ditulis secara formal dan deskriptif.