Creați histograme animate folosind R

Creați histograme animate folosind R

Diagramele cu bare animate care pot fi încorporate direct într-o postare de pe orice site web devin din ce în ce mai populare. Ele afișează dinamica modificărilor oricăror caracteristici într-un anumit timp și fac acest lucru în mod clar. Să vedem cum să le creăm folosind R și pachete generice.

Skillbox recomandă: Curs practic „Dezvoltator Python de la zero”.

Amintim: pentru toți cititorii „Habr” - o reducere de 10 de ruble la înscrierea la orice curs Skillbox folosind codul promoțional „Habr”.

pachete

Avem nevoie de pachete în R:

Aceste două sunt extrem de necesare. În plus, tidyverse, janitor și cântare vor fi necesare pentru a gestiona datele, a curăța matricea și a formata în consecință.

De date

Setul de date original pe care îl vom folosi în acest proiect este descărcat de pe site-ul Băncii Mondiale. Aici sunt ei - Datele Băncii Mondiale. Aceleași date, dacă aveți nevoie de ele gata făcute, pot fi descărcate de pe folderele de proiect.

Ce fel de informație este aceasta? Eșantionul conține valoarea PIB-ului majorității țărilor pentru mai mulți ani (din 2000 până în 2017).

Procesarea datelor

Vom folosi codul postat mai jos pentru a pregăti formatul de date necesar. Ștergem numele coloanelor, transformăm numerele într-un format numeric și convertim datele folosind funcția gather(). Salvăm tot ce este primit în gdp_tidy.csv pentru utilizare ulterioară.

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

Histograme animate

Crearea lor necesită două etape:

  • Trasarea unui set complet de histograme reale folosind ggplot2.
  • Animați histogramele statice cu parametrii doriti folosind gganimate.

Pasul final este redarea animației în formatul dorit, inclusiv GIF sau MP4.

Se încarcă biblioteci

  • bibliotecă (tidyverse)
  • bibliotecă (gganimate)

Management de date

În acest pas, trebuie să filtrați datele pentru a obține primele 10 țări pentru fiecare an. Să adăugăm mai multe coloane care ne vor permite să afișăm o legendă pentru 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()

Construirea de histograme statice

Acum că avem un pachet de date în formatul necesar, începem să desenăm histograme statice. Informații de bază - primele 10 țări cu PIB maxim pentru intervalul de timp selectat. Cream grafice pentru fiecare an.

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

Crearea de diagrame folosind ggplot2 este foarte simplă. După cum puteți vedea în secțiunea de cod de mai sus, există câteva puncte cheie cu funcția theme(). Sunt necesare pentru ca toate elementele să se anime fără probleme. Este posibil ca unele dintre ele să nu fie afișate dacă este necesar. Exemplu: Sunt desenate doar liniile și legendele grilei verticale, dar titlurile axelor și alte câteva componente sunt eliminate din zonă.

animație

Funcția-cheie aici este transition_states(), care leagă împreună grafice statice separate. view_follow() este folosit pentru a desena linii de grilă.

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

Redare

Odată ce animația este creată și stocată în obiectul anim, este timpul să o redați folosind funcția animate(). Redarea utilizată în animate() poate fi diferită în funcție de tipul de fișier de ieșire necesar.

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 )

Rezultat

Creați histograme animate folosind R

După cum puteți vedea, nimic complicat. Întregul proiect este disponibil în GitHub-ul meu, îl puteți folosi după cum credeți de cuviință.

Skillbox recomandă:

Sursa: www.habr.com

Adauga un comentariu