
Animierte Histogramme, die direkt in Veröffentlichungen auf jeder Website eingebettet werden können, werden immer beliebter. Sie zeigen dynamisch die Veränderungen beliebiger Merkmale über einen bestimmten Zeitraum und tun dies anschaulich. Lassen Sie uns ansehen, wie man sie mit R und universellen Paketen erstellt.
Skillbox empfiehlt: Praktischer Kurs .
Wir erinnern daran: alle Leser von „Habr“ erhalten einen Rabatt von 10.000 Rubel bei der Anmeldung zu einem beliebigen Kurs von Skillbox mit dem Aktionscode „Habr“.
Pakete
Wir benötigen Pakete in R:
- ggplot2
Diese beiden sind unbedingt erforderlich. Darüber hinaus sind tidyverse, janitor und scales zur Datenverwaltung, zur Bereinigung des Datensatzes und zur Formatierung erforderlich.
Daten
Der originale Datensatz, den wir in diesem Projekt verwenden werden, wird von der Website der Weltbank heruntergeladen. Hier sind sie - . Die gleichen Daten, falls Sie sie in fertiger Form benötigen, können Sie aus der .
Was ist das für eine Information? Die Stichprobe enthält die BIP-Werte der meisten Länder über mehrere Jahre (von 2000 bis 2017).
Datenverarbeitung
Wir werden den untenstehenden Code verwenden, um das erforderliche Datenformat vorzubereiten. Wir bereinigen die Spaltennamen, konvertieren Zahlen in ein numerisches Format und wandeln die Daten mithilfe der Funktion gather() um. Alles, was wir erhalten, wird in gdp_tidy.csv für die weitere Verwendung gespeichert.
Bibliothek(tidyverse)
Bibliothek(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")
Animierte Histogramme
Ihre Erstellung erfordert zwei Schritte:
- Erstellung eines vollständigen Satzes aktueller Histogramme mit ggplot2.
- Animation von statischen Histogrammen mit den gewünschten Parametern mithilfe von gganimate.
Der letzte Schritt ist das Rendern der Animation im gewünschten Format, einschließlich GIF oder MP4.
Laden der Bibliotheken
- Bibliothek(tidyverse)
- library(gganimate)
Datenmanagement
In diesem Schritt müssen die Daten gefiltert werden, um die Top 10 Länder jedes Jahres zu erhalten. Fügen wir einige Spalten hinzu, die es ermöglichen, die Legende für das Histogramm anzuzeigen.
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()
Erstellung statischer Histogramme
Jetzt, da wir ein Paket von Daten im erforderlichen Format haben, beginnen wir mit dem Zeichnen statischer Histogramme. Die Grundinformationen sind die Top 10 Länder mit dem höchsten BIP über den gewählten Zeitraum. Die Grafiken werden für jedes Jahr erstellt.
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"))
Das Erstellen von Grafiken mit ggplot2 ist recht einfach. Wie im obigen Codeabschnitt zu sehen ist, gibt es einige Schlüsselpunkte zur Funktion theme(). Diese sind notwendig, damit alle Elemente problemlos animiert werden. Einige davon können bei Bedarf auch nicht angezeigt werden. Ein Beispiel: Es werden nur die vertikalen Gitternetzlinien und Legenden gezeichnet, während die Achsentitel und einige andere Komponenten entfernt werden.
Animation
Die Schlüssel-Funktion hier ist transition_states(), die einzelne statische Grafiken zusammenfügt. view_follow() wird verwendet, um die Gitternetzlinien darzustellen.
anim = staticplot + transition_states(Jahr, transition_length = 4, state_length = 1) +
view_follow(fixed_x = TRUE) +
labs(title = 'BIP pro Jahr : {closest_state}',
subtitle = "Top 10 Länder",
caption = "BIP in Milliarden USD | Datenquelle: Weltbankdaten")
Rendering
Nachdem die Animation erstellt und im Objekt anim gespeichert wurde, ist es an der Zeit, sie mit der Funktion animate() zu visualisieren. Der Renderer, der in animate() verwendet wird, kann je nach Art der gewünschten Ausgabedatei unterschiedlich sein.
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 )
Ergebnis

Wie wir sehen, ist das nichts Kompliziertes. Das gesamte Projekt ist verfügbar auf , Sie können es nutzen, wie Sie es für richtig halten.
Skillbox empfiehlt:
- Zweijähriger praktischer Kurs .
- Online-Kurs .
- Praktischer Jahreskurs .
Quelle: habr.com
