Crea histogrammi animati cù R

Crea histogrammi animati cù R

I grafici di barre animati chì ponu esse incrustati direttamente in un postu in qualsiasi situ web sò diventati sempri più populari. Mostranu a dinamica di i cambiamenti in ogni caratteristiche annantu à un certu tempu è facenu cusì chjaramente. Videmu cumu si creanu cù R è pacchetti generici.

Skillbox consiglia: Corso praticu "Sviluppatore Python da zero".

Ramintemu: per tutti i lettori di "Habr" - un scontu di 10 000 rubles quandu si iscrizzione in ogni cursu Skillbox cù u codice promozionale "Habr".

Pacchetti

Avemu bisognu di pacchetti in R:

Questi dui sò assai necessarii. Inoltre, tidyverse, janitor è scale seranu richiesti per gestisce e dati, pulizziari l'array è formate in cunseguenza.

dati

U dataset originale chì useremu in stu prughjettu hè scaricatu da u situ web di u Bancu Mundiale. Eccu sò - Dati di u Bancu Mundiale. U listessu dati, s'è vo avete bisognu di ready-made, pò esse telecaricatu da cartulare di prughjettu.

Chì tipu d'infurmazione hè questu? A mostra cuntene u valore di u PIB di a maiò parte di i paesi per parechji anni (da 2000 à 2017).

Trattamentu di dati

Avemu aduprà u codice publicatu sottu à priparà u furmatu di dati nicissarii. Emu sguassate i nomi di colonna, trasfurmemu i numeri in un formatu numericu, è cunvertisce e dati cù a funzione gather (). Salvemu tuttu ciò chì hè ricevutu in gdp_tidy.csv per più usu.

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

Histogrammi animati

A so creazione richiede duie tappe:

  • Tracendu un inseme cumpletu di histogrammi reali cù ggplot2.
  • Animate l'istogrammi statici cù i paràmetri desiderati cù gganimate.

L'ultimu passu hè di rende l'animazione in u furmatu desideratu, cumpresu GIF o MP4.

Caricà e librerie

  • biblioteca (tidyverse)
  • biblioteca (gganimate)

Gestione di i dati

In questu passu, avete bisognu di filtrà i dati per ottene i primi 10 paesi per ogni annu. Aghjunghjemu parechje colonne chì ci permettenu di vede una legenda per l'istogramma.

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

Custruisce istogrammi statici

Avà chì avemu un pacchettu di dati in u formatu necessariu, cuminciamu à disegnà istogrammi statici. Informazioni basiche - i primi 10 paesi cù u PIB massimu per l'intervallu di tempu sceltu. Creemu grafici per ogni annu.

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

A creazione di trame cù ggplot2 hè assai simplice. Comu pudete vede in a seccione di codice sopra, ci sò parechji punti chjave cù a funzione theme (). Sò necessarii per chì tutti l'elementi animanu senza prublemi. Qualchidunu di elli ùn ponu micca esse affissati se necessariu. Esempiu: Solu i linii di griglia verticale è e legende sò disegnati, ma i tituli di l'assi è parechji altri cumpunenti sò eliminati da l'area.

Animazione

A funzione chjave quì hè transition_states(), unisce grafici statici separati. view_follow() hè utilizatu per disegnà linee di griglia.

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

Rende

Una volta chì l'animazione hè creata è guardata in l'ughjettu anim, hè u tempu di rende a funzione animate (). U rendering utilizatu in animate () pò esse diversu secondu u tipu di schedariu di output necessariu.

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 )

risultatu

Crea histogrammi animati cù R

Comu pudete vede, nunda di complicatu. U prughjettu tutale hè dispunibule in u mo GitHub, pudete aduprà cum'è vo vulete.

Skillbox consiglia:

Source: www.habr.com

Add a comment