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")
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
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
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")