TUGAS VISUALISASI

1. Polar Chart

Polar chart adalah bentuk modifikasi dari bar chart (diagram batang) yang dibentangkan melingkar. Sumbu X dipetakan menjadi sudut (0–360°), sedangkan sumbu Y dipetakan menjadi panjang radius.

Digunakan ketika :

  • menunjukkan perbandingan kategori secara melingkar.

  • cocok bila ingin menampilkan data yang bersifat siklus atau periodik (misal bulan dalam setahun, jam dalam sehari).

# Paket
library(ggplot2)

# Data simulasi
set.seed(123)
polar_data <- data.frame(
  category = LETTERS[1:10],
  value = sample(5:20, 10, replace = TRUE)
)

# Polar chart
ggplot(polar_data, aes(x = category, y = value, fill = category)) +
  geom_bar(stat = "identity") +
  coord_polar() +
  theme_minimal() +
  labs(title = "Polar Chart")

2. SUnburst Chart

Sunburst chart digunakan untuk memvisualisasikan data hierarkis (data bertingkat). Bentuknya seperti lingkaran konsentris, di mana:

  • Lingkaran pusat = level pertama (misalnya negara).

  • Lingkaran berikutnya = level lebih dalam (misalnya provinsi → kota).

Kapan digunakan:

  • Menunjukkan struktur hierarki sekaligus proporsi tiap cabang.

  • Misal: data organisasi (divisi → departemen → tim), data geografis (negara → provinsi → kota), data produk (kategori → subkategori → item).

# Paket
library(plotly)
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
# Data hierarki
labels <- c("Indonesia", 
            "Jawa Tengah", "Jawa Barat", "Jawa Timur", 
            "Semarang", "Surakarta", "Bandung", "Bogor", "Surabaya", "Malang")

parents <- c("", 
             "Indonesia", "Indonesia", "Indonesia", 
             "Jawa Tengah", "Jawa Tengah", "Jawa Barat", "Jawa Barat", "Jawa Timur", "Jawa Timur")

values <- c(NA, 15, 20, 25, 10, 5, 8, 12, 14, 11)

# Sunburst chart
fig <- plot_ly(
  labels = labels,
  parents = parents,
  values = values,
  type = "sunburst",
  branchvalues = "total"
)

fig <- fig %>% layout(title = "Sunburst Chart: Hierarki Wilayah Indonesia")
fig

3. Streamgraph

Streamgraph adalah variasi dari stacked area chart, tetapi bentuknya dibuat lebih organik/mengalir. Setiap “aliran” (stream) mewakili satu kategori, dan ketebalan aliran menunjukkan besar nilai sepanjang waktu.

Kapan digunakan:

  • Menunjukkan perubahan proporsi atau jumlah kategori sepanjang waktu.

  • Cocok untuk data time series multikategori (misalnya jumlah penjualan produk A/B/C tiap tahun).

library(plotly)

# Data simulasi
set.seed(123)
years <- 2000:2010
stream_data <- data.frame(
  year = rep(years, each = 3),
  kategori = rep(c("A", "B", "C"), times = length(years)),
  value = round(runif(33, 5, 30))
)

# Ubah ke format wide
library(tidyr)
stream_wide <- pivot_wider(stream_data, names_from = kategori, values_from = value)

# Plot
fig <- plot_ly(stream_wide, x = ~year, y = ~A, type = 'scatter', mode = 'none',
               stackgroup = 'one', name = 'A') %>%
  add_trace(y = ~B, name = 'B') %>%
  add_trace(y = ~C, name = 'C') %>%
  layout(title = "Streamgraph", yaxis = list(title = "Value"))

fig

4. Circular HeatMap

Circular heatmap adalah visualisasi data dua dimensi (X dan Y) yang ditampilkan dalam bentuk melingkar (polar coordinates).

  • Sumbu X (biasanya variabel periodik, seperti bulan/hari) ditampilkan dalam bentuk lingkaran 360°.

  • Sumbu Y (biasanya level/kategori tambahan, misalnya jam, tahun, atau individu) ditampilkan radial dari pusat ke luar.

  • Warna (fill) mewakili intensitas/nilai pada kombinasi X dan Y tersebut.

# Paket
library(ggplot2)

# Data simulasi
set.seed(123)
circular_data <- expand.grid(
  bulan = month.abb,        
  jam   = 0:23                
)
circular_data$value <- runif(nrow(circular_data), 0, 100)  

# Circular heatmap
ggplot(circular_data, aes(x = bulan, y = jam, fill = value)) +
  geom_tile(color = "white") +
  scale_fill_viridis_c(option = "C") +
  coord_polar(theta = "x") +
  theme_minimal() +
  labs(title = "Circular Heatmap",
       x = "Bulan", y = "Jam", fill = "Value")