Buat histogram animasi menggunakan R



Histogram beranimasi yang dapat Anda embed langsung dalam publikasi di situs mana pun menjadi semakin populer. Mereka menampilkan dinamika perubahan dalam karakteristik apa pun untuk waktu tertentu dan melakukannya dengan jelas. Mari kita lihat cara membuatnya menggunakan paket R dan universal.

Skillbox merekomendasikan: Pengembang Python dari awal tentu saja.

Kami mengingatkan Anda: untuk semua pembaca "Habr" - diskon 10.000 rubel saat mendaftar untuk kursus Skillbox apa pun menggunakan kode promo "Habr".

Paket


Kami membutuhkan paket dalam R:


Keduanya penting. Selain itu, tidyverse, petugas kebersihan, dan skala diperlukan untuk mengelola data, menghapus array, dan format masing-masing.

Data


Kumpulan data asli yang akan kami gunakan dalam proyek ini diunduh dari situs web Bank Dunia. Inilah mereka - Data WorldBank . Data yang sama, jika Anda membutuhkannya dalam bentuk yang sudah jadi, dapat diunduh dari folder proyek .

Apa informasi ini? Sampel berisi nilai PDB sebagian besar negara selama beberapa tahun (dari 2000 hingga 2017).

Pemrosesan data


Kami akan menggunakan kode di bawah ini untuk menyiapkan format data yang diperlukan. Kami menghapus nama kolom, mengubah angka menjadi format angka, dan mengonversi data menggunakan fungsi kumpulkan (). Semua yang diterima disimpan di gdp_tidy.csv untuk digunakan di masa mendatang.

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

Grafik Bar Animasi


Penciptaan mereka membutuhkan dua tahap:

  • Membangun satu set lengkap histogram yang relevan menggunakan ggplot2.
  • Animasi histogram statis dengan parameter yang diinginkan menggunakan gganimate.

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

Memuat perpustakaan


  • perpustakaan (rapi)
  • perpustakaan (gganimate)

Manajemen data


Pada langkah ini, Anda perlu memfilter data untuk mendapatkan 10 negara teratas setiap tahun. Tambahkan beberapa kolom yang memungkinkan Anda untuk menampilkan legenda untuk 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 diinginkan, kita mulai menggambar histogram statis. Informasi dasar - 10 negara teratas dengan PDB maksimum untuk interval waktu yang dipilih. Kami membuat bagan 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")) 

Membangun grafik menggunakan ggplot2 cukup sederhana. Seperti yang Anda lihat di bagian kode di atas, ada beberapa poin kunci dengan fungsi theme (). Mereka diperlukan agar semua elemen dianimasikan tanpa masalah. Beberapa dari mereka mungkin tidak ditampilkan jika perlu. Contoh: hanya garis dan legenda kotak vertikal yang digambar, tetapi judul sumbu dan beberapa komponen lainnya dihapus dari situs.

Animasi


Fungsi kuncinya di sini adalah transition_states (), yang menempelkan grafik statis terpisah. view_follow () digunakan untuk menggambar garis kisi.

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

Rendering


Setelah animasi dibuat dan disimpan di objek anim, saatnya memvisualisasikannya menggunakan fungsi animate (). Perender yang digunakan dalam animate () dapat bervariasi tergantung pada jenis file output 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




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

Skillbox merekomendasikan:

Source: https://habr.com/ru/post/id446952/


All Articles