
Les histogrammes animĂ©s, qui peuvent ĂȘtre intĂ©grĂ©s directement dans des publications sur n'importe quel site, deviennent de plus en plus populaires. Ils affichent dynamiquement l'Ă©volution de diverses caractĂ©ristiques sur une pĂ©riode donnĂ©e de maniĂšre visuelle. Voyons comment les crĂ©er avec R et des packages universels.
Skillbox recommande : Cours pratique .
Rappelons-le : pour tous les lecteurs de « Habr » â une rĂ©duction de 10 000 roubles lors de l'inscription Ă tout cours Skillbox avec le code promo « Habr ».
Packages
Nous avons besoin des packages dans R :
- ggplot2
Ces deux sont absolument nécessaires. En outre, nous aurons besoin de tidyverse, janitor et scales pour gérer les données, nettoyer le tableau et formater respectivement.
Données
L'ensemble de donnĂ©es original que nous allons utiliser dans ce projet est tĂ©lĂ©chargĂ© depuis le site de la Banque mondiale. Les voici : . Les mĂȘmes donnĂ©es, si vous en avez besoin dans un format prĂȘt Ă l'emploi, peuvent ĂȘtre tĂ©lĂ©chargĂ©es depuis .
Qu'est-ce que c'est que ces informations ? L'échantillon contient les valeurs du PIB de la plupart des pays sur plusieurs années (de 2000 à 2017).
Traitement des données
Nous allons utiliser le code ci-dessous pour préparer le format de données nécessaire. Nous nettoyons les noms de colonnes, convertissons les chiffres au format numérique et transformons les données à l'aide de la fonction gather(). Tout ce qui est obtenu est sauvegardé dans gdp_tidy.csv pour un usage ultérieur.
bibliothĂšque(tidyverse)
bibliothĂšque(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")
Histogrammes animés
La création de ces derniers nécessite deux étapes :
- Construire un ensemble complet d'histogrammes pertinents en utilisant ggplot2.
- Animer les histogrammes statiques avec les paramÚtres souhaités à l'aide de gganimate.
L'étape finale consiste à rendre l'animation dans le format souhaité, y compris GIF ou MP4.
Chargement des bibliothĂšques
- bibliothĂšque(tidyverse)
- library(gganimate)
Gestion des données
à cette étape, il faut filtrer les données pour obtenir le top 10 des pays de chaque année. Nous allons ajouter quelques colonnes qui permettront d'afficher la légende pour l'histogramme.
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) %>%
filter(rank %
ungroup()
Construction des histogrammes statiques
Maintenant que nous avons un ensemble de données au format requis, nous commençons à dessiner les histogrammes statiques. Les informations de base concernent le top 10 des pays ayant le PIB le plus élevé pour la période choisie. Nous construisons des graphiques pour chaque année.
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"))
Construire des graphiques avec ggplot2 est assez simple. Comme vous pouvez le voir dans le code ci-dessus, il y a plusieurs points clĂ©s avec la fonction theme(). Ils sont nĂ©cessaires pour que tous les Ă©lĂ©ments s'animent sans problĂšme. Certains d'entre eux peuvent ĂȘtre masquĂ©s si nĂ©cessaire. Par exemple : seules les lignes verticales de la grille et les lĂ©gendes sont affichĂ©es, tandis que les titres des axes et quelques autres composants sont retirĂ©s du graphique.
Animation
La fonction clé ici est transition_states(), qui unit des graphiques statiques distincts. view_follow() est utilisée pour dessiner les lignes de la grille.
anim = staticplot + transition_states(year, transition_length = 4, state_length = 1) +
view_follow(fixed_x = TRUE) +
labs(title = 'PIB par an : {closest_state}',
subtitle = "Top 10 des pays",
caption = "PIB en milliards USD | Source des données : Banque Mondiale")
Rendu
AprÚs que l'animation ait été créée et enregistrée dans l'objet anim, il est temps de la visualiser à l'aide de la fonction animate(). Le rendu utilisé dans animate() peut varier selon le type de fichier de sortie requis.
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)
Résultat

Comme nous le voyons, rien de compliqué. Tout le projet est disponible sur , vous pouvez l'utiliser comme bon vous semble.
Skillbox recommande :
- Cours pratique de deux ans .
- Cours en ligne .
- Cours pratique d'un an .
Source : habr.com
