Buat Histogram Animasi Menggunakan R

Buat Histogram Animasi Menggunakan R

Diagram batang animasi yang dapat disematkan langsung ke dalam postingan di situs web mana pun menjadi semakin populer. Mereka menampilkan dinamika perubahan karakteristik apa pun selama waktu tertentu dan melakukannya dengan jelas. Mari kita lihat cara membuatnya menggunakan R dan paket generik.

Skillbox merekomendasikan: Tentu saja praktis "Pengembang Python dari awal".

Kami mengingatkan: untuk semua pembaca "Habr" - diskon 10 rubel saat mendaftar di kursus Skillbox apa pun menggunakan kode promosi "Habr".

Paket

Kami membutuhkan paket di R:

Kedua hal ini sangat diperlukan. Selain itu, rapiverse, petugas kebersihan, dan timbangan akan diperlukan untuk mengelola data, membersihkan array, dan memformatnya sesuai kebutuhan.

Data

Dataset asli yang akan kami gunakan dalam proyek ini diunduh dari situs Bank Dunia. Di sini mereka - Data Bank Dunia. Data yang sama, jika Anda memerlukannya yang sudah jadi, dapat diunduh dari folder proyek.

Informasi macam apa ini? Sampel berisi nilai PDB sebagian besar negara selama beberapa tahun (dari tahun 2000 hingga 2017).

Pengolahan data

Kami akan menggunakan kode yang diposting di bawah ini untuk menyiapkan format data yang diperlukan. Kami menghapus nama kolom, mengubah angka menjadi format angka, dan mengonversi data menggunakan fungsi kumpulkan(). Kami menyimpan semua yang diterima di gdp_tidy.csv untuk digunakan lebih lanjut.

library(tidyverse)
library(janitor)

gdp <- read_csv("./data/GDP_Data.csv")

#select required columns

gdp <- gdp %>% select(3:15)

#filter only country rows

gdp <- gdp[1:217,]

gdp_tidy <- gdp %>%
mutate_at(vars(contains("YR")),as.numeric) %>%
gather(year,value,3:13) %>%
janitor::clean_names() %>%
mutate(year = as.numeric(stringr::str_sub(year,1,4)))

write_csv(gdp_tidy,"./data/gdp_tidy.csv")

Histogram animasi

Pembuatannya memerlukan dua tahap:

  • Merencanakan satu set lengkap histogram aktual menggunakan ggplot2.
  • Animasikan histogram statis dengan parameter yang diinginkan menggunakan gganimate.

Langkah terakhir adalah merender animasi dalam format yang diinginkan, termasuk GIF atau MP4.

Memuat perpustakaan

  • perpustakaan (rapiverse)
  • perpustakaan (ganim)

Manajemen data

Pada langkah ini, Anda perlu memfilter data untuk mendapatkan 10 negara teratas setiap tahunnya. Mari tambahkan beberapa kolom yang memungkinkan kita menampilkan legenda histogram.

gdp_tidy <- read_csv("./data/gdp_tidy.csv")

gdp_formatted <- gdp_tidy %>%
group_by(year) %>%
# The * 1 makes it possible to have non-integer ranks while sliding
mutate(rank = rank(-value),
Value_rel = value/value[rank==1],
Value_lbl = paste0(" ",round(value/1e9))) %>%
group_by(country_name) %>%
filter(rank <=10) %>%
ungroup()

Membangun histogram statis

Sekarang kita memiliki paket data dalam format yang diperlukan, kita mulai menggambar histogram statis. Informasi dasar - 10 negara teratas dengan PDB maksimum untuk interval waktu yang dipilih. Kami membuat grafik untuk setiap tahun.

staticplot = ggplot(gdp_formatted, aes(rank, group = country_name,
fill = as.factor(country_name), color = as.factor(country_name))) +
geom_tile(aes(y = value/2,
height = value,
width = 0.9), alpha = 0.8, color = NA) +
geom_text(aes(y = 0, label = paste(country_name, " ")), vjust = 0.2, hjust = 1) +
geom_text(aes(y=value,label = Value_lbl, hjust=0)) +
coord_flip(clip = "off", expand = FALSE) +
scale_y_continuous(labels = scales::comma) +
scale_x_reverse() +
guides(color = FALSE, fill = FALSE) +
theme(axis.line=element_blank(),
axis.text.x=element_blank(),
axis.text.y=element_blank(),
axis.ticks=element_blank(),
axis.title.x=element_blank(),
axis.title.y=element_blank(),
legend.position="none",
panel.background=element_blank(),
panel.border=element_blank(),
panel.grid.major=element_blank(),
panel.grid.minor=element_blank(),
panel.grid.major.x = element_line( size=.1, color="grey" ),
panel.grid.minor.x = element_line( size=.1, color="grey" ),
plot.title=element_text(size=25, hjust=0.5, face="bold", colour="grey", vjust=-1),
plot.subtitle=element_text(size=18, hjust=0.5, face="italic", color="grey"),
plot.caption =element_text(size=8, hjust=0.5, face="italic", color="grey"),
plot.background=element_blank(),
plot.margin = margin(2,2, 2, 4, "cm"))

Membuat plot menggunakan ggplot2 sangat sederhana. Seperti yang Anda lihat pada bagian kode di atas, ada beberapa poin penting dengan fungsi theme(). Mereka diperlukan agar semua elemen dapat bernyawa tanpa masalah. Beberapa di antaranya mungkin tidak ditampilkan jika perlu. Contoh: Hanya garis grid vertikal dan legenda yang digambar, namun judul sumbu dan beberapa komponen lainnya dihapus dari area tersebut.

Animasi

Fungsi kuncinya di sini adalah transisi_states(), yang menyatukan grafik statis yang terpisah. view_follow() digunakan untuk menggambar garis grid.

anim = staticplot + transition_states(year, transition_length = 4, state_length = 1) +
view_follow(fixed_x = TRUE) +
labs(title = 'GDP per Year : {closest_state}',
subtitle = "Top 10 Countries",
caption = "GDP in Billions USD | Data Source: World Bank Data")

Merender

Setelah animasi dibuat dan disimpan di objek anim, sekarang saatnya merendernya menggunakan fungsi animate(). Penyaji yang digunakan dalam animate() bisa berbeda-beda bergantung pada jenis file keluaran yang diperlukan.

GIF

# For GIF

animate(anim, 200, fps = 20, width = 1200, height = 1000,
renderer = gifski_renderer("gganim.gif"))

MP4

# For MP4

animate(anim, 200, fps = 20, width = 1200, height = 1000,
renderer = ffmpeg_renderer()) -> for_mp4

anim_save("animation.mp4", animation = for_mp4 )

Hasil

Buat Histogram Animasi Menggunakan R

Seperti yang Anda lihat, tidak ada yang rumit. Seluruh proyek tersedia di GitHub saya, Anda dapat menggunakannya sesuai keinginan Anda.

Skillbox merekomendasikan:

Sumber: www.habr.com

Tambah komentar