
Animierte Histogramme, die direkt in die Publikation auf jeder Website eingebettet werden können, erfreuen sich zunehmender Beliebtheit. Sie zeigen anschaulich die Dynamik von Veränderungen verschiedener Merkmale über einen bestimmten Zeitraum. Lassen Sie uns ansehen, wie wir diese mit R und universellen Paketen erstellen können.
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 folgende Pakete in R:
- ggplot2
Diese beiden sind unerlässlich. Außerdem benötigen wir tidyverse, janitor und scales, um die Daten zu verwalten, das Array zu bereinigen und die Formatierung vorzunehmen.
Daten
Der originale Datensatz, den wir für dieses Projekt verwenden werden, kann von der Website der Weltbank heruntergeladen werden. Hier sind sie – . Diese Daten können, falls Sie sie in fertiger Form benötigen, aus der .
Was sind das für Informationen? Die Stichprobe enthält das BIP der meisten Länder über mehrere Jahre (von 2000 bis 2017).
Datenbearbeitung
Wir werden den untenstehenden Code verwenden, um das benötigte Datenformat vorzubereiten. Wir bereinigen die Spaltennamen, konvertieren Zahlen in ein numerisches Format und wandeln die Daten mit 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 statischer Histogramme 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 sollten 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, wo wir die Daten im gewünschten Format haben, beginnen wir mit der Erstellung der statischen Histogramme. Die Basisinformation sind die Top 10 der Länder mit dem höchsten BIP im 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"))
Grafiken mit ggplot2 zu erstellen, ist recht einfach. Wie Sie im obigen Codeabschnitt sehen können, gibt es einige wichtige Punkte mit der Funktion theme(). Diese sind notwendig, damit alle Elemente problemlos animiert werden. Einige davon können bei Bedarf nicht angezeigt werden. Beispiel: Nur die vertikalen Gitterlinien und Legenden werden gezeichnet, während 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 Gitterlinien zu zeichnen.
anim = staticplot + transition_states(jahr, transition_length = 4, state_length = 1) +
view_follow(fixed_x = TRUE) +
labs(titel = 'BIP pro Jahr: {closest_state}',
untertitel = "Top 10 Länder",
caption = "BIP in Milliarden USD | Datenquelle: Weltbank Daten")
Rendering
Nachdem die Animation erstellt und im Objekt anim gespeichert wurde, ist es Zeit, sie mit der Funktion animate() zu visualisieren. Der Renderer, der in animate() verwendet wird, kann je nach Art der benötigten Ausgabedatei variieren.
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 nichts kompliziert. Das gesamte Projekt ist auf , Sie können es nach Belieben nutzen.
Skillbox empfiehlt:
- Zweijähriger praktischer Kurs .
- Online-Kurs .
- Praktischer Jahreskurs .
Quelle: habr.com
