Membuat Race Bar Chart di R

Race Bar Chart

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"))
Race Bar Chart GGPLot2

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

Tulisan Lainnya

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

Daftar Isi