Crea istogrammi animati utilizzando R

Crea istogrammi animati utilizzando R

I grafici a barre animati che possono essere incorporati direttamente in un post su qualsiasi sito web stanno diventando sempre piΓΉ popolari. Mostrano la dinamica dei cambiamenti in qualsiasi caratteristica in un certo tempo e lo fanno chiaramente. Vediamo come crearli utilizzando R e pacchetti generici.

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

Ti ricordiamo: per tutti i lettori di "Habr" - uno sconto di 10 rubli al momento dell'iscrizione a qualsiasi corso Skillbox utilizzando il codice promozionale "Habr".

pacchetti

Abbiamo bisogno di pacchetti in R:

Questi due sono estremamente necessari. Inoltre, tidyverse, bidello e bilancia dovranno gestire i dati, ripulire l'array e formattarlo di conseguenza.

Dati

Il set di dati originale che utilizzeremo in questo progetto viene scaricato dal sito web della Banca Mondiale. Eccoli - Dati della Banca Mondiale. Gli stessi dati, se ne hai bisogno giΓ  pronti, possono essere scaricati da cartelle di progetto.

Che tipo di informazioni sono queste? Il campione contiene il valore del PIL della maggior parte dei paesi per diversi anni (dal 2000 al 2017).

Elaborazione dati

Utilizzeremo il codice pubblicato di seguito per preparare il formato dati richiesto. Cancellamo i nomi delle colonne, trasformiamo i numeri in un formato numerico e convertiamo i dati utilizzando la funzione raccogli(). Salviamo tutto ciΓ² che riceviamo in gdp_tidy.csv per un ulteriore utilizzo.

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

Istogrammi animati

La loro creazione richiede due fasi:

  • Tracciare un set completo di istogrammi reali utilizzando ggplot2.
  • Anima gli istogrammi statici con i parametri desiderati utilizzando gganimate.

Il passaggio finale Γ¨ eseguire il rendering dell'animazione nel formato desiderato, incluso GIF o MP4.

Caricamento delle librerie

  • libreria (tidyverse)
  • libreria(gganimate)

Gestione dei dati

In questo passaggio, devi filtrare i dati per ottenere i primi 10 paesi per ogni anno. Aggiungiamo diverse colonne che ci permetteranno di visualizzare 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()

Costruire istogrammi statici

Ora che disponiamo di un pacchetto dati nel formato richiesto, iniziamo a disegnare istogrammi statici. Informazioni di base: i primi 10 paesi con il PIL massimo per l'intervallo di tempo selezionato. Creiamo grafici per ogni anno.

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

Creare grafici utilizzando ggplot2 Γ¨ molto semplice. Come puoi vedere nella sezione del codice sopra, ci sono diversi punti chiave con la funzione theme(). Sono necessari affinchΓ© tutti gli elementi si animino senza problemi. Alcuni di essi potrebbero non essere visualizzati se necessario. Esempio: vengono disegnate solo le linee della griglia verticale e le legende, ma i titoli degli assi e diversi altri componenti vengono rimossi dall'area.

animazione

La funzione chiave qui Γ¨ transit_states(), unisce grafici statici separati. view_follow() viene utilizzato per disegnare le linee della 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")

Rendering

Una volta creata e archiviata l'animazione nell'oggetto anim, Γ¨ il momento di renderizzarla utilizzando la funzione animate(). Il renderer utilizzato in animate() puΓ² essere diverso a seconda del tipo di file di output richiesto.

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 )

risultato

Crea istogrammi animati utilizzando R

Come puoi vedere, niente di complicato. L'intero progetto Γ¨ disponibile in il mio GitHub, puoi usarlo come meglio credi.

Skillbox consiglia:

Fonte: habr.com

Aggiungi un commento