Erstellen Sie animierte Histogramme mit R.



Animierte Histogramme, die Sie direkt in eine Publikation auf einer beliebigen Website einbetten können, werden immer beliebter. Sie zeigen die Dynamik von Änderungen an Merkmalen für eine bestimmte Zeit an und machen dies klar. Mal sehen, wie man sie mit R- und Universal-Paketen erstellt.

Skillbox empfiehlt: Der Python-Entwickler von Grund auf zum Anfassen .

Wir erinnern Sie daran: Für alle Leser von „Habr“ - ein Rabatt von 10.000 Rubel bei der Anmeldung für einen Skillbox-Kurs mit dem Promo-Code „Habr“.

Pakete


Wir brauchen Pakete in R:


Diese beiden sind wesentlich. Darüber hinaus sind Tidyverse, Hausmeister und Waage erforderlich, um Daten zu verwalten, das Array zu löschen bzw. zu formatieren.

Daten


Der Originaldatensatz, den wir in diesem Projekt verwenden werden, wird von der Website der Weltbank heruntergeladen. Hier sind sie - WorldBank Data . Dieselben Daten können aus dem Projektordner heruntergeladen werden, wenn Sie sie in fertiger Form benötigen.

Was ist diese Information? Die Stichprobe enthält das BIP der meisten Länder über mehrere Jahre (von 2000 bis 2017).

Datenverarbeitung


Wir werden den folgenden Code verwenden, um das erforderliche Datenformat vorzubereiten. Wir löschen die Spaltennamen, wandeln die Zahlen in ein Zahlenformat um und konvertieren die Daten mit der Funktion collect (). Alles, was empfangen wird, wird zur späteren Verwendung in gdp_tidy.csv gespeichert.

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

Animierte Balkendiagramme


Ihre Schaffung erfordert zwei Stufen:

  • Erstellen eines vollständigen Satzes relevanter Histogramme mit ggplot2.
  • Animieren statischer Histogramme mit gewünschten Parametern mit gganimate.

Der letzte Schritt ist das Rendern der Animation im gewünschten Format, einschließlich GIF oder MP4.

Bibliotheken laden


  • Bibliothek (tidyverse)
  • Bibliothek (gganimate)

Datenverwaltung


In diesem Schritt müssen Sie die Daten filtern, um die Top 10 Länder eines jeden Jahres zu erhalten. Fügen Sie einige Spalten hinzu, in denen Sie die Legende für das Histogramm anzeigen können.

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

Statische Histogramme erstellen


Nachdem wir das Datenpaket im gewünschten Format haben, beginnen wir mit dem Zeichnen der statischen Histogramme. Grundlegende Informationen - Top 10 Länder mit maximalem BIP für das ausgewählte Zeitintervall. Wir erstellen Diagramme für jedes Jahr.

 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 Diagrammen mit ggplot2 ist recht einfach. Wie Sie im obigen Codeabschnitt sehen können, gibt es einige wichtige Punkte bei der Funktion theme (). Sie sind notwendig, damit alle Elemente problemlos animiert werden. Einige von ihnen werden bei Bedarf möglicherweise nicht angezeigt. Beispiel: Es werden nur vertikale Gitterlinien und Legenden gezeichnet, aber die Überschriften der Achsen und einige weitere Komponenten werden von der Site entfernt.

Animation


Die Schlüsselfunktion hier ist Transition_States (), sie klebt separate statische Graphen. view_follow () wird zum Zeichnen von Gitterlinien verwendet.

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

Rendern


Nachdem die Animation erstellt und im Animationsobjekt gespeichert wurde, ist es Zeit, sie mit der Funktion animate () zu visualisieren. Der in animate () verwendete Renderer kann je nach Art der erforderlichen 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 Sie sehen können, nichts kompliziertes. Das gesamte Projekt ist in meinem GitHub verfügbar. Sie können es nach Belieben verwenden.

Skillbox empfiehlt:

Source: https://habr.com/ru/post/de446952/


All Articles