Visualisasi asli menampilkan tingkat keterisian tempat tidur rumah sakit di DKI Jakarta pada empat tanggal: 29 Januari (54%), 30 Januari (57%), 31 Januari (57%), dan 1 Februari (60%).
Grafik asli memakai diagram lingkaran 3D untuk menunjukkan tingkat keterisian tempat tidur rumah sakit pada empat tanggal. Padahal, data ini lebih cocok ditampilkan dengan grafik garis karena kita ingin melihat perubahan nilai dari hari ke hari, bukan membandingkan bagian dari satu keseluruhan. Efek 3D, warna yang terlalu mencolok, dan latar belakang yang ramai juga membuat grafik sulit dibaca.
Catatan: Angka yang terbaca pada gambar adalah 54% (29 Januari), 57% (30 Januari), 57% (31 Januari), dan 60% (1 Februari). Tahun, definisi indikator, dan data asli dari Dinas Kesehatan DKI Jakarta belum tersedia. Jadi, angka tersebut digunakan berdasarkan gambar, bukan hasil verifikasi terhadap sumber aslinya.
Mengganti diagram lingkaran 3D dengan grafik garis. Grafik garis lebih cocok karena kita ingin melihat perubahan tingkat keterisian tempat tidur dari hari ke hari, bukan membandingkan bagian dari suatu keseluruhan.
Membuat grafik lebih mudah dibaca. Tanggal diurutkan dari yang paling awal hingga paling akhir, angka persentase ditampilkan langsung, dan latar belakang disederhanakan agar informasi utama lebih jelas.
Mempertahankan data asli. Semua angka tetap sama seperti pada gambar awal. Tidak ada data tambahan atau perkiraan nilai di antara tanggal, sehingga grafik menunjukkan perubahan berdasarkan data yang tersedia saja.
# Data generation berdasarkan angka yang terbaca pada gambar asli.
# Tahun tidak dicantumkan karena tidak tersedia pada sumber gambar.
data_rs <- data.frame(
tanggal = as.Date(
c("2000-01-29", "2000-01-30", "2000-01-31", "2000-02-01")
),
keterisian = c(54, 57, 57, 60)
)
# Tahun 2000 bukan klaim tahun observasi.
data_rs$label_tanggal <- c(
"29 Januari", "30 Januari", "31 Januari", "1 Februari"
)
stopifnot(
nrow(data_rs) == 4L,
!anyNA(data_rs$keterisian),
all(data_rs$keterisian >= 0 & data_rs$keterisian <= 100),
!anyDuplicated(data_rs$label_tanggal)
)
data_rs$label_tanggal <- factor(
data_rs$label_tanggal,
levels = data_rs$label_tanggal
)
data_rs
library(ggplot2)
grafik_rs <- ggplot(
data_rs,
aes(x = label_tanggal, y = keterisian, group = 1)
) +
geom_line(color = "#2471A3", linewidth = 1.1) +
geom_point(color = "#2471A3", size = 3.5) +
geom_text(
aes(label = paste0(keterisian, "%")),
vjust = -0.9,
size = 4,
fontface = "bold"
) +
scale_y_continuous(
limits = c(0, 100),
breaks = seq(0, 100, by = 20),
labels = function(x) paste0(x, "%"),
expand = expansion(mult = c(0, 0.07))
) +
labs(
title = "Tingkat Keterisian Tempat Tidur Rumah Sakit",
subtitle = "DKI Jakarta | 29 Januari–1 Februari",
x = "Tanggal",
y = "Tingkat keterisian",
caption = paste(
"Sumber: angka ditranskripsikan dari gambar yang diberikan.",
"Tahun dan data sumber asli belum tersedia."
)
) +
theme_minimal(base_size = 12) +
theme(
plot.title = element_text(face = "bold", size = 15),
plot.subtitle = element_text(color = "grey35"),
axis.title = element_text(face = "bold"),
panel.grid.minor = element_blank(),
plot.caption = element_text(
color = "grey40", hjust = 0, size = 9
)
)
grafik_rs
Tingkat keterisian tempat tidur rumah sakit naik dari 54% pada 29 Januari menjadi 60% pada 1 Februari. Artinya, persentasenya naik 6 poin persentase. Pada 30 dan 31 Januari, tingkat keterisiannya sama-sama 57%, lalu naik menjadi 60% pada 1 Februari.
Secara sederhana, tempat tidur rumah sakit terlihat semakin banyak terisi selama empat hari tersebut. Namun, data ini terlalu singkat untuk memastikan apakah kenaikan akan terus berlanjut, apa penyebabnya, atau apakah rumah sakit di DKI Jakarta secara keseluruhan kekurangan tempat tidur.
Grafik garis lebih mudah digunakan untuk melihat apakah tingkat keterisian tempat tidur rumah sakit naik atau turun dari hari ke hari. Namun, kita belum bisa memastikan makna perubahan tersebut secara lengkap karena tahun pengamatan, definisi tingkat keterisian, dan data sumber aslinya belum tersedia atau terverifikasi.
Visualisasi asli menampilkan proporsi empat jenis sistem pembayaran, yaitu COD (20%), M-Banking (64%), Paylater/Cicilan (2%), dan Lainnya (14%), dalam bentuk diagram lingkaran.
Grafik asli menunjukkan empat jenis sistem pembayaran, dengan M-Banking paling banyak digunakan (64%), disusul COD (20%), Lainnya (14%), dan Paylater/Cicilan (2%). Namun, tampilannya perlu diperbaiki karena latar kuning terang, ornamen, dan teks tebal membuat informasi utama kurang menonjol.
Selain itu, irisan diagram lingkaran sulit dibandingkan, terutama kategori 2%, dan pembaca harus mencocokkan warna dengan legenda untuk mengetahui nama kategorinya. Narasi tentang kemudahan dan pembayaran tanpa kontak juga belum terbukti oleh grafik karena data hanya menunjukkan persentase, bukan alasan pemilihan metode pembayaran.
Meskipun total persentasenya 100%, jumlah responden, periode pengamatan, dan sumber data belum tersedia. Karena itu, angka tersebut diperlakukan sebagai informasi yang dibaca dari gambar, bukan data yang telah diverifikasi.
Diagram lingkaran diganti dengan diagram batang horizontal agar perbedaan persentase antarjenis pembayaran lebih mudah dibandingkan. Grafik menggunakan latar putih, warna yang konsisten, label persentase langsung, serta urutan dari nilai terbesar ke terkecil. Ornamen dan legenda dihilangkan agar informasi utama lebih jelas. Narasi tentang alasan memilih metode pembayaran tidak dijadikan kesimpulan karena belum didukung data yang sesuai.
library(ggplot2)
# 1. Data generation berdasarkan gambar asli
data_pembayaran <- data.frame(
sistem = c(
"COD",
"M-Banking",
"Paylater/Cicilan",
"Lainnya"
),
persentase = c(20, 64, 2, 14)
)
# 2. Validasi data
stopifnot(
nrow(data_pembayaran) == 4L,
!anyNA(data_pembayaran),
all(data_pembayaran$persentase >= 0 &
data_pembayaran$persentase <= 100),
sum(data_pembayaran$persentase) == 100,
!anyDuplicated(data_pembayaran$sistem)
)
# Urutkan dari persentase terbesar ke terkecil
data_pembayaran$sistem <- factor(
data_pembayaran$sistem,
levels = data_pembayaran$sistem[
order(data_pembayaran$persentase)
]
)
# 3. Visualisasi revisi
grafik_pembayaran <- ggplot(
data_pembayaran,
aes(x = sistem, y = persentase)
) +
geom_col(
fill = "#2878B5",
width = 0.68
) +
geom_text(
aes(label = paste0(persentase, "%")),
hjust = -0.25,
size = 4,
fontface = "bold"
) +
coord_flip(clip = "off") +
scale_y_continuous(
limits = c(0, 100),
breaks = seq(0, 100, 20),
labels = function(x) paste0(x, "%"),
expand = expansion(mult = c(0, 0.02))
) +
labs(
title = "Distribusi Sistem Pembayaran",
subtitle = "Persentase menurut kategori",
x = NULL,
y = "Persentase",
caption = paste(
"Sumber: angka ditranskripsikan dari gambar asli.",
"Jumlah responden dan sumber data belum tersedia."
)
) +
theme_minimal(base_size = 12) +
theme(
plot.title = element_text(
face = "bold", size = 16
),
plot.subtitle = element_text(
color = "grey35"
),
axis.title.x = element_text(
face = "bold"
),
axis.text.y = element_text(
color = "grey20"
),
panel.grid.major.y = element_blank(),
panel.grid.minor = element_blank(),
plot.caption = element_text(
color = "grey40", hjust = 0, size = 9
),
plot.margin = margin(10, 35, 10, 10)
)
print(grafik_pembayaran)
M-Banking memiliki persentase tertinggi sebesar 64%, diikuti COD (20%), Lainnya (14%), dan Paylater/Cicilan (2%). Artinya, M-Banking menjadi metode pembayaran yang paling dominan dalam data tersebut, dengan selisih 44 poin persentase dari COD. Namun, karena informasi jumlah responden dan cara pengumpulan data belum tersedia, hasil ini belum tentu mewakili seluruh pelanggan dan belum menjelaskan alasan mereka memilih metode pembayaran tersebut.
Diagram batang horizontal membuat perbandingan jenis pembayaran lebih mudah dibaca, terutama untuk kategori dengan persentase kecil. Grafik baru tetap menggunakan angka yang sama, tetapi menyusun kategori dari yang terbesar hingga terkecil tanpa menambahkan kesimpulan yang belum didukung data.
Visualisasi asli menampilkan persentase masyarakat yang menggunakan komputer di 34 provinsi Indonesia pada tahun 2019 dalam dua diagram batang, yaitu diagram batang vertikal dan horizontal.
Grafik asli menampilkan data yang sama dalam dua diagram batang, sehingga tampilannya menjadi berulang. Label provinsi pada grafik vertikal sulit dibaca, sedangkan grafik horizontal lebih mudah dibaca tetapi belum diurutkan dari persentase tertinggi ke terendah. Judul dan keterangan sumber juga belum menjelaskan indikator secara lengkap.
Catatan: Data asli dan definisi indikator belum tersedia untuk diverifikasi. Karena itu, grafik revisi sebaiknya menggunakan data resmi BPS, bukan angka perkiraan dari gambar.
Grafik diperbaiki dengan menggunakan satu diagram batang horizontal agar tampilan lebih ringkas dan tidak mengulang informasi. Provinsi diurutkan dari persentase tertinggi ke terendah, lalu nilai persentase ditampilkan di ujung setiap batang agar mudah dibaca.
Desain juga dibuat lebih sederhana dengan warna yang konsisten, latar bersih, skala yang dimulai dari nol, serta judul dan sumber yang jelas. Dengan demikian, pembaca lebih mudah membandingkan persentase penggunaan komputer antarprovinsi dan melihat perbedaan nilainya.
library(ggplot2)
library(dplyr)
# 1. Baca CSV
data_komputer <- read.csv(
"Assets/data-bps-2019.csv",
header = FALSE,
skip = 3,
col.names = c(
"provinsi",
"laki_laki",
"perempuan",
"laki_laki_perempuan"
),
na.strings = c("-", "", "NA"),
stringsAsFactors = FALSE,
check.names = FALSE
)
# 2. Konversi kolom persentase menjadi numerik
data_komputer <- data_komputer %>%
mutate(
provinsi = trimws(provinsi),
laki_laki_perempuan = as.numeric(laki_laki_perempuan)
) %>%
# Hilangkan agregat nasional dan data yang tidak tersedia
filter(
provinsi != "INDONESIA",
!is.na(laki_laki_perempuan)
)
# 3. Validasi data
stopifnot(
nrow(data_komputer) == 34L,
!anyDuplicated(data_komputer$provinsi),
all(data_komputer$laki_laki_perempuan >= 0 &
data_komputer$laki_laki_perempuan <= 100)
)
# 4. Urutkan dari nilai terendah ke tertinggi
data_komputer <- data_komputer %>%
arrange(laki_laki_perempuan) %>%
mutate(
provinsi = factor(provinsi, levels = provinsi)
)
# 5. Buat diagram batang horizontal
grafik_komputer <- ggplot(
data_komputer,
aes(x = laki_laki_perempuan, y = provinsi)
) +
geom_col(
fill = "#2878B5",
width = 0.55
) +
geom_text(
aes(label = sprintf("%.2f", laki_laki_perempuan)),
hjust = -0.2,
size = 2.3
) +
scale_x_continuous(
limits = c(
0,
max(data_komputer$laki_laki_perempuan) * 1.10
),
breaks = seq(0, 25, by = 5),
labels = function(x) sprintf("%.0f", x),
expand = expansion(mult = c(0, 0))
) +
labs(
title = "Persentase Penduduk yang Menggunakan Komputer",
subtitle = "Menurut Provinsi di Indonesia, 2019",
x = "Penduduk yang menggunakan komputer (%)",
y = NULL,
caption = "Sumber: data-bps-2019.csv, data tahun 2019."
) +
theme_minimal(base_size = 10) +
theme(
plot.title = element_text(
face = "bold",
size = 13,
margin = margin(b = 6)
),
plot.subtitle = element_text(
size = 9,
color = "grey40",
margin = margin(b = 12)
),
axis.text.y = element_text(
size = 6.5,
color = "grey25"
),
axis.text.x = element_text(
size = 8,
color = "grey35"
),
axis.title.x = element_text(
size = 9,
margin = margin(t = 10)
),
panel.grid.major.y = element_blank(),
panel.grid.minor = element_blank(),
panel.grid.major.x = element_line(
color = "grey88",
linewidth = 0.3
),
plot.caption = element_text(
size = 7,
color = "grey45",
hjust = 0,
margin = margin(t = 12)
),
plot.margin = margin(
t = 15, r = 25, b = 15, l = 10
)
)
print(grafik_komputer)
Persentase masyarakat yang menggunakan komputer berbeda-beda di setiap provinsi pada tahun 2019. Dari grafik, DKI Jakarta dan DI Yogyakarta tampak memiliki persentase tertinggi, sedangkan Papua terendah.
Hal ini menunjukkan bahwa penggunaan komputer tidak merata di seluruh provinsi. Namun, penyebab perbedaan tersebut belum dapat diketahui hanya dari grafik ini.
Diagram batang horizontal yang diurutkan dari persentase tertinggi ke terendah membuat perbandingan 34 provinsi lebih mudah dibaca. Desain ini menghilangkan grafik yang berulang, memperjelas nama provinsi, dan membantu pembaca melihat provinsi dengan persentase tertinggi maupun terendah. Namun, angka yang digunakan harus berasal dari data BPS yang terverifikasi agar hasilnya akurat.
Visualisasi asli menampilkan jumlah kasus baru COVID-19 per hari melalui diagram batang abu-abu dan garis rata-rata bergerak 7 hari berwarna biru, untuk menunjukkan fluktuasi harian dan tren kasus selama periode 22 Januari hingga sekitar 31 Agustus.
Grafik asli menunjukkan jumlah kasus baru setiap hari yang naik turun cukup tajam, sehingga tren keseluruhannya sulit dilihat. Garis rata-rata 7 hari membantu memperjelas tren tersebut, tetapi label tanggal yang terlalu padat dan legenda yang kurang ringkas membuat grafik sulit dibaca.
Selain itu, judul Noise vs Signal belum menjelaskan lokasi dan periode data secara lengkap. Tahun, cakupan wilayah, dan data asli juga belum dapat dipastikan hanya dari gambar.
Visualisasi diperbaiki dengan tetap menggunakan diagram batang dan garis rata-rata bergerak 7 hari. Batang menunjukkan jumlah kasus baru setiap hari, sedangkan garis membantu melihat tren secara lebih jelas. Label tanggal dibuat lebih sederhana agar mudah dibaca, dan warna grafik dibedakan supaya informasi utama lebih menonjol. Judul, satuan, periode, serta sumber data juga diperjelas agar pembaca dapat memahami grafik dengan tepat.
# ============================================================
# VISUALISASI 4: NOISE VS SIGNAL — DATA COVID-19 SINTETIS
# ============================================================
library(ggplot2)
library(dplyr)
library(scales)
# 1. Data generation
set.seed(123)
tanggal <- seq(
as.Date("2020-01-22"),
as.Date("2020-08-31"),
by = "day"
)
n <- length(tanggal)
hari <- seq_len(n)
# Pola tren yang menyerupai grafik asli
titik_hari <- as.numeric(as.Date(c(
"2020-01-22", "2020-03-10", "2020-04-10",
"2020-05-15", "2020-06-15", "2020-07-15",
"2020-08-01", "2020-08-31"
)) - min(tanggal))
titik_kasus <- c(
100, 2000, 75000, 80000,
130000, 220000, 260000, 255000
)
tren <- approx(
x = titik_hari,
y = titik_kasus,
xout = hari - 1,
method = "linear"
)$y
# Tambahkan fluktuasi harian dan pola mingguan sintetis
noise <- rnorm(n, mean = 0, sd = pmax(150, tren * 0.12))
pola_mingguan <- 1 + 0.10 * sin(2 * pi * hari / 7)
kasus <- round(pmax(
0,
(tren + noise) * pola_mingguan
))
data_covid <- data.frame(
date = tanggal,
new_cases = kasus
)
# 2. Validasi data
stopifnot(
nrow(data_covid) == n,
!anyNA(data_covid),
!anyDuplicated(data_covid$date),
all(is.finite(data_covid$new_cases)),
all(data_covid$new_cases >= 0)
)
# 3. Hitung rata-rata bergerak 7 hari
data_covid <- data_covid %>%
mutate(
moving_avg_7d = as.numeric(
stats::filter(
new_cases,
filter = rep(1 / 7, 7),
sides = 1
)
)
)
# 4. Visualisasi
grafik_covid <- ggplot(data_covid, aes(x = date)) +
geom_col(
aes(y = new_cases),
fill = "grey75",
width = 0.85
) +
geom_line(
aes(y = moving_avg_7d),
color = "#168AAD",
linewidth = 1
) +
scale_x_date(
date_breaks = "1 month",
date_labels = "%b %Y",
expand = expansion(mult = c(0.01, 0.02))
) +
scale_y_continuous(
labels = label_comma(),
expand = expansion(mult = c(0, 0.08))
) +
labs(
title = "Simulasi Kasus Baru COVID-19 Harian",
subtitle = paste(
"Data sintetis | Batang: kasus harian;",
"garis: rata-rata bergerak 7 hari"
),
x = "Tanggal",
y = "Jumlah kasus (simulasi)",
caption = paste(
"Sumber: data sintetis yang dibangkitkan dengan R.",
"Bukan data historis atau laporan resmi COVID-19."
)
) +
theme_minimal(base_size = 12) +
theme(
plot.title = element_text(face = "bold", size = 15),
plot.subtitle = element_text(color = "grey35"),
panel.grid.minor = element_blank(),
axis.title = element_text(face = "bold"),
plot.caption = element_text(
hjust = 0,
color = "grey40")
)
grafik_covid <- grafik_covid +
scale_x_date(
date_breaks = "1 month",
date_labels = "%b %Y",
expand = expansion(mult = c(0.02, 0.06))
) +
theme(
plot.margin = margin(
t = 10, r = 30, b = 10, l = 10,
unit = "pt"
)
)
print(grafik_covid)
Batang pada grafik menunjukkan jumlah kasus baru yang dilaporkan setiap hari, sehingga kenaikan dan penurunannya bisa terlihat. Sementara itu, garis rata-rata 7 hari membantu melihat tren secara lebih jelas karena perubahan jumlah kasus dari hari ke hari menjadi lebih halus.
Dengan melihat keduanya, kita bisa memahami perubahan kasus harian sekaligus pola umumnya. Namun, grafik ini tidak menjelaskan penyebab perubahan tersebut atau memastikan apakah tingkat penularan meningkat atau menurun.
Diagram batang menunjukkan naik-turunnya jumlah kasus setiap hari, sedangkan garis rata-rata 7 hari membantu melihat tren secara lebih jelas. Perbaikan membuat grafik lebih mudah dibaca tanpa mengubah data aslinya.