Membuat Race Bar Chart di R


Race bar chart merupakan bentuk visualisasi dinamis yang sangat efektif untuk menggambarkan perubahan peringkat dari waktu ke waktu. Salah satu aplikasi yang menarik adalah untuk melihat perkembangan ekonomi negara-negara di dunia berdasarkan nilai PDB (Produk Domestik Bruto) tertinggi dari tahun ke tahun.
Dalam tutorial ini, kita akan membuat race bar chart 10 negara terbesar berdasarkan nilai PDB untuk periode tahun 1990 hingga 2022. Dataset untuk informasi ini tersedia pada World Bank (WDI) di mana menyediakan paketnya untuk Bahasa R. Namun, tentu saja pembaca dapat menggunakan data lainnya sepanjang memiliki format dan karakteristik yang sesuai untuk dibuat dalam bentuk race bar chart.
Instalasi Paket
Berikut adalah beberapa paket yang akan kita gunakan beserta penjelasan singkatnya:
- ggplot2: untuk membuat grafik dengan sistem grammar of graphics
- dplyr: untuk manipulasi data seperti filter, group_by, dan mutate
- gganimate: untuk membuat animasi dari grafik ggplot
- scales: untuk format angka seperti menggunakan koma atau notasi miliar
- WDI: untuk mengambil data ekonomi dan pembangunan dari World Bank secara langsung
R
install.packages(c("ggplot2", "dplyr", "gganimate", "scales", "WDI")) library(ggplot2) library(dplyr) library(gganimate) library(scales) library(WDI)
Penyiapan Data
Seperti yang disampaikan sebelumnya, data yang digunakan yaitu data PDB negara-negara di dunia untuk periode tahun 1990 sampai 2022. Pada kode berikut ini, kita melakukan beberapa proses manipulasi data sampai siap digunakan untuk pembuatan visualisasi grafiknya.
Pertama kita memfilter data dan hanya mengambil informasi dari wilayah negara saja. Berikutnya, kita kelompokkan data dengan mengambil 10 negara dengan PDB terbesar untuk setiap tahunnya. Di sini juga ditambahkan beberapa kolom baru yang nantinya digunakan sebagai bagian dari visualisasi.
R
# Ambil data PDB untuk seluruh negara dari tahun 1990-2022 pdb_data <- WDI(country = "all", indicator = "NY.GDP.MKTP.CD", start = 1990, end = 2022, extra = TRUE) # Data asli bercampur antara data negara maupun kelompok regional (misal OECD) # Filter hanya negara (bukan wilayah dan bukan kelompok regional), dan hapus NA pdb_clean <- pdb_data %>% filter(region != "", income != "Aggregates", !is.na(NY.GDP.MKTP.CD)) %>% rename(pdb = NY.GDP.MKTP.CD) %>% select(tahun = year, negara = country, pdb) # Ambil 10 besar per tahun dan hitung label serta batas atas ranked_data <- pdb_clean %>% group_by(tahun) %>% mutate(rank = rank(-pdb)) %>% filter(rank <= 10) %>% mutate(pdb_max = max(pdb) * 1.25, # digunakan Tambah ruang 25% untuk label kanan label = paste0("$", format(round(pdb / 1e9), big.mark=","), " Miliar")) %>% ungroup() # Cetak 20 data pertama head(ranked_data, 20)
# OUTPUT tahun negara pdb rank pdb_max label <int> <chr> <dbl> <dbl> <dbl> <chr> 1 2019 Brazil 1.87e12 9 2.69e13 $ 1,873 Miliar 2 2018 Brazil 1.92e12 9 2.58e13 $ 1,917 Miliar 3 2017 Brazil 2.06e12 8 2.45e13 $ 2,064 Miliar 4 2016 Brazil 1.80e12 9 2.35e13 $ 1,796 Miliar 5 2015 Brazil 1.80e12 9 2.29e13 $ 1,802 Miliar 6 2014 Brazil 2.46e12 7 2.20e13 $ 2,456 Miliar 7 2013 Brazil 2.47e12 7 2.11e13 $ 2,473 Miliar 8 2012 Brazil 2.47e12 7 2.03e13 $ 2,465 Miliar 9 2011 Brazil 2.62e12 7 1.95e13 $ 2,616 Miliar 10 2010 Brazil 2.21e12 7 1.88e13 $ 2,209 Miliar 11 2009 Brazil 1.67e12 8 1.81e13 $ 1,667 Miliar 12 2008 Brazil 1.70e12 8 1.85e13 $ 1,696 Miliar 13 2007 Brazil 1.40e12 10 1.81e13 $ 1,397 Miliar 14 2006 Brazil 1.11e12 10 1.73e13 $ 1,108 Miliar 15 2000 Brazil 6.55e11 10 1.28e13 $ 655 Miliar 16 1998 Brazil 8.64e11 8 1.13e13 $ 864 Miliar 17 1997 Brazil 8.83e11 8 1.07e13 $ 883 Miliar 18 1996 Brazil 8.50e11 8 1.01e13 $ 850 Miliar 19 1995 Brazil 7.69e11 7 9.55e12 $ 769 Miliar 20 1990 Brazil 4.65e11 10 7.45e12 $ 465 Miliar
Membuat Race Bar Chart
Grafik ini dibangun menggunakan kombinasi dari ggplot2
dan gganimate
, dengan pendekatan visual horizontal menggunakan coord_flip()
agar nama negara dan label PDB terlihat rapi dan proporsional. Setiap batang mewakili satu negara yang berada di 10 besar PDB pada tahun tertentu. Pergerakan waktu dikontrol dengan transition_time()
, sedangkan fungsi view_follow()
menjaga agar sumbu Y mengikuti skala nilai tertinggi secara dinamis.
Teks nama negara ditempatkan di dalam batang dengan geom_text()
, dan label nilai PDB ditampilkan di luar ujung batang untuk memperjelas nilai aktual. Tema yang digunakan adalah theme_void()
agar tampilan lebih minimalis dan fokus ke elemen visual utama. Selain itu, clip = "off"
dan pengaturan plot.margin
memberikan ruang di sisi kanan agar label tidak terpotong.
R
# Buat grafik race bar chart dengan sumbu X dinamis grafik <- ggplot(ranked_data, aes(x = -rank, y = pdb, fill = negara)) + geom_col(width = 0.8) + coord_flip(clip = "off") + geom_text(aes(label = negara), hjust = 1.1, color = "white", size = 7) + geom_text(aes(label = label), hjust = -0.1, size = 6) + scale_y_continuous(labels = label_number(scale_cut = cut_short_scale())) + theme_void(base_size = 15) + theme(legend.position = "none", axis.text.y = element_blank(), axis.ticks.y = element_blank(), plot.margin = margin(10, 100, 10, 10)) + labs(title = '10 Negara dengan PDB Terbesar', subtitle = 'Tahun: {frame_time}', x = '', y = 'PDB (USD)', size = 10) + transition_time(tahun) + view_follow(fixed_x = TRUE, fixed_y = FALSE) + ease_aes('cubic-in-out') # Render animasi animate(grafik, fps = 24, duration = 30, width = 960, height = 720) # Render animasi untuk disimpan dalam format GIF # animate(grafik, fps = 24, duration = 30, width = 960, height = 720, renderer = gifski_renderer("pdb_race_chart.gif")) # Render animasi untuk disimpan dalam format MP4 # animate(grafik, fps = 24, duration = 30, width = 960, height = 720, renderer = av_renderer("pdb_race_chart.mp4"))


Ringkasan
Race bar chart adalah alat visualisasi yang menarik serta bermanfaat untuk menampilkan dinamika peringkat data sepanjang periode waktu tertentu. Dengan memanfaatkan ggplot2
, dplyr
, dan gganimate
, kita dapat menyajikan data secara informatif dan menarik. Pembaca tentunya dapat mengembangkan visualisasi ini lebih lanjut sesuai kebutuhan, seperti menambahkan indikator tambahan atau menyesuaikan tampilan grafis untuk konteks tertentu sesuai data yang digunakan.
Referensi
- Dokumentasi
ggplot2
: https://ggplot2.tidyverse.org - Dokumentasi
gganimate
: https://gganimate.com - Paket
WDI
(World Bank Data): https://cran.r-project.org/package=WDI