Creiamo istogrammi animati usando R

Creiamo istogrammi animati usando R

Gli istogrammi animati, che possono essere integrati direttamente nelle pubblicazioni su qualsiasi sito, stanno diventando sempre più popolari. Mostrano l'andamento delle variazioni di qualsiasi caratteristica nel tempo e lo fanno in modo visivo. Vediamo come crearli usando R e pacchetti universali.

Skillbox consiglia: Corso pratico «Sviluppatore Python da zero».

Ricordiamo: per tutti i lettori di «Habr» — sconto di 10.000 rubli per l'iscrizione a qualsiasi corso Skillbox con il codice promozionale «Habr».

Pacchetti

Abbiamo bisogno dei pacchetti in R:

Questi due sono essenziali. Inoltre, saranno necessari tidyverse, janitor e scales per gestire i dati, pulire l'array e formattare rispettivamente.

Dati

Il set di dati originale che utilizzeremo in questo progetto viene scaricato dal sito della Banca Mondiale. Ecco qui — WorldBank Data. Gli stessi dati, se necessari in un formato pronto, possono essere scaricati dalla cartella del progetto.

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

Elaborazione dei dati

Utilizzeremo il codice riportato di seguito per preparare il formato dati necessario. Puliscono i nomi delle colonne, convertono i numeri in formato numerico e trasformano i dati utilizzando la funzione gather(). Tutto ciò che viene ottenuto verrà salvato in gdp_tidy.csv per utilizzi futuri.

library(tidyverse)
library(janitor)

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

#select required columns

gdp % select(3:15)

#filter only country rows

gdp <- gdp[1:217,]

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

Grafici a barre animati

La loro creazione richiede due fasi:

  • Costruzione di un insieme completo di grafici a barre correnti utilizzando ggplot2.
  • Animazione di grafici a barre statici con i parametri desiderati utilizzando gganimate.

L'ultimo passaggio è il rendering dell'animazione nel formato desiderato, inclusi GIF o MP4.

Caricamento delle librerie

  • library(tidyverse)
  • library(gganimate)

Gestione dei dati

In questo passaggio è necessario filtrare i dati per ottenere le top-10 nazioni di ogni anno. Aggiungeremo alcune colonne che permetteranno di visualizzare la legenda per il grafico a barre.

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

gdp_formatted %
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) %>%
filtra(rank <=10) %
sgruppa()

Costruzione di istogrammi statici

Ora che abbiamo un pacchetto di dati nel formato corretto, iniziamo a disegnare gli istogrammi statici. L'informazione di base è rappresentata dai primi 10 paesi con il PIL più alto nel periodo selezionato. Creiamo i 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"))

Costruire grafici utilizzando ggplot2 è piuttosto semplice. Come puoi vedere nel segmento di codice sopra, ci sono alcuni punti chiave con la funzione theme(). Questi sono necessari affinché tutti gli elementi vengano animati senza problemi. Alcuni di essi possono essere omessi se necessario. Ad esempio: vengono visualizzate solo le linee verticali della griglia e le leggende, mentre i titoli degli assi e altri componenti vengono rimossi dal segmento.

Animazione

La funzione chiave qui è transition_states(), che unisce i singoli grafici statici. view_follow() viene utilizzato per disegnare le linee della griglia.

anim = staticplot + transition_states(anno, transition_length = 4, state_length = 1) +
view_follow(fixed_x = TRUE) +
labs(title = 'PIL per Anno : {closest_state}',
subtitle = "Le 10 Nazioni Principali",
caption = "PIL in Miliardi USD | Fonte Dati: Dati della Banca Mondiale")

Rendering

Dopo che l'animazione è stata creata e salvata nell'oggetto anim, è il momento di visualizzarla utilizzando la funzione animate(). Il renderer utilizzato in animate() può variare in base al 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

Creiamo istogrammi animati usando R

Come vediamo, non c'è niente di complicato. L'intero progetto è disponibile su il mio GitHub, puoi usarlo come ritieni opportuno.

Skillbox consiglia:

Fonte: habr.com

Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster