Erstellt animéiert Histogramme mat R

Erstellt animéiert Histogramme mat R

Animéiert Bar Charts, déi direkt an e Post op all Websäit agebonne kënne ginn, ginn ëmmer méi populär. Si weisen d'Dynamik vun Ännerungen an all Charakteristiken iwwer eng gewëssen Zäit a maachen dat kloer. Loosst eis kucken wéi se se mat R a generesche Packagen erstellen.

Skillbox recommandéiert: Praktesch Cours "Python Entwéckler vun Null".

Mir erënneren Iech: fir all Habr Lieser - eng Remise vun 10 Rubel wann Dir Iech an all Skillbox Cours aschreift mat dem Habr Promo Code.

Packagen

Mir brauchen Packagen am R:

Dës zwee sinn extrem néideg. Zousätzlech wäerten d'Tyvers, de Janitor a Skalen erfuerderlech sinn fir d'Donnéeën ze managen, d'Array ze botzen an deementspriechend ze formatéieren.

Donnéeën

Déi ursprénglech Datesaz, déi mir an dësem Projet benotzen, gëtt vun der Weltbank Websäit erofgelueden. Hei sinn se - WorldBank Daten. Déi selwecht Donnéeën, wann Dir se fäerdeg braucht, kënnen erofgeluede ginn Projet Classeure.

Wéi eng Informatioun ass dëst? D'Probe enthält de PIB Wäert vun de meeschte Länner fir e puer Joer (vun 2000 bis 2017).

Donnéeën Veraarbechtung

Mir benotze de Code hei ënnendrënner fir dat erfuerdert Dateformat virzebereeden. Mir läschen d'Kolonnnimm, verwandelen d'Zuelen an e Nummerformat, a konvertéieren d'Donnéeën mat der Funktioun sammelen (). Mir späicheren alles wat an gdp_tidy.csv kritt gëtt fir weider ze benotzen.

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

Animéiert Histogrammer

Hir Kreatioun erfuerdert zwou Etappen:

  • Plott e komplette Set vun aktuellen Histogramme mat ggplot2.
  • Animéiert statesch Histogramme mat gewënschten Parameteren mat gganimate.

De leschte Schrëtt ass d'Animatioun am gewënschten Format ze maachen, dorënner GIF oder MP4.

Luede Bibliothéiken

  • Bibliothéik (Tydyverse)
  • Bibliothéik (gganimate)

Datemanagement

An dësem Schrëtt musst Dir d'Donnéeën filteren fir déi Top 10 Länner fir all Joer ze kréien. Loosst eis e puer Spalten derbäi ginn, déi eis erlaben eng Legend fir den Histogramm ze weisen.

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

Bauen statesch histograms

Elo datt mir en Datepaket am erfuerderleche Format hunn, fänken mir un statesch Histogrammer ze zéien. Basisinformatioun - Top 10 Länner mat maximalem PIB fir de gewielten Zäitintervall. Mir kreéieren Grafike fir all Joer.

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

Komplott erstellen mat ggplot2 ass ganz einfach. Wéi Dir an der Code Rubrik hei uewen gesitt, ginn et e puer Schlësselpunkte mat der Theme () Funktioun. Si sinn néideg fir datt all Elementer ouni Probleemer animéieren. E puer vun hinnen kënnen net ugewise ginn wann néideg. Beispill: Nëmmen déi vertikal Gitterlinnen a Legenden ginn gezeechent, awer d'Achstitel a verschidde aner Komponente ginn aus der Géigend geläscht.

Animatioun

D'Schlësselfunktioun hei ass transition_states (), et setzt separat statesch Grafike zesummen. view_follow () gëtt benotzt fir Gitterlinnen ze zéien.

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

Rendering

Wann d'Animatioun erstallt an am Animatiounsobjekt gespäichert ass, ass et Zäit et mat der Animate () Funktioun ze maachen. De Renderer, deen an animate () benotzt gëtt kann ënnerschiddlech sinn ofhängeg vun der erfuerderter Ausgangsdatei.

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 )

Resultat

Erstellt animéiert Histogramme mat R

Wéi Dir kënnt gesinn, näischt komplizéiert. De ganze Projet ass verfügbar an meng GitHub, Dir kënnt et benotzen wéi Dir passt.

Skillbox recommandéiert:

Source: will.com

Setzt e Commentaire