Kreirajte animirane histograme koristeći R

Kreirajte animirane histograme koristeći R

Animirani trakasti grafikoni koji se mogu ugraditi direktno u objavu na bilo kojoj web stranici postaju sve popularniji. Oni prikazuju dinamiku promjena bilo koje karakteristike tokom određenog vremena i to jasno rade. Pogledajmo kako ih kreirati koristeći R i generičke pakete.

Skillbox preporučuje: Praktični kurs "Python programer od nule".

Podsećamo: za sve čitaoce "Habra" - popust od 10 rubalja pri upisu na bilo koji Skillbox kurs koristeći "Habr" promotivni kod.

Paketi

Potrebni su nam paketi u R:

Ovo dvoje je izuzetno neophodno. Osim toga, tidyverse, domar i vaga će biti potrebni za upravljanje podacima, čišćenje niza i formatiranje u skladu s tim.

podaci

Originalni skup podataka koji ćemo koristiti u ovom projektu preuzet je sa web stranice Svjetske banke. Evo ih - Podaci Svjetske banke. Isti podaci, ako su vam potrebni spremni, možete preuzeti sa projektne fascikle.

Kakva je ovo informacija? Uzorak sadrži vrijednost BDP-a većine zemalja za nekoliko godina (od 2000. do 2017.).

Obrada podataka

Koristićemo kod objavljen ispod da pripremimo potreban format podataka. Brišemo nazive kolona, ​​pretvaramo brojeve u format brojeva i konvertujemo podatke pomoću funkcije gather(). Sve što dobijemo čuvamo u gdp_tidy.csv za dalju upotrebu.

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

Animirani histogrami

Njihovo stvaranje zahteva dve faze:

  • Iscrtavanje kompletnog skupa stvarnih histograma pomoću ggplot2.
  • Animirajte statičke histograme sa željenim parametrima koristeći gganimate.

Posljednji korak je renderiranje animacije u željenom formatu, uključujući GIF ili MP4.

Učitavanje biblioteka

  • biblioteka (tidyverse)
  • biblioteka (gganimate)

Upravljanje podacima

U ovom koraku morate filtrirati podatke da biste dobili 10 najboljih zemalja za svaku godinu. Dodajmo nekoliko kolona koje će nam omogućiti da prikažemo legendu za histogram.

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

Izgradnja statičkih histograma

Sada kada imamo paket podataka u potrebnom formatu, počinjemo crtati statičke histograme. Osnovne informacije - top 10 zemalja sa maksimalnim BDP-om za odabrani vremenski interval. Izrađujemo grafikone za svaku godinu.

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

Kreiranje dijagrama pomoću ggplot2 je vrlo jednostavno. Kao što možete vidjeti u gornjem dijelu koda, postoji nekoliko ključnih tačaka sa funkcijom theme(). Oni su neophodni kako bi svi elementi animirali bez problema. Neki od njih možda neće biti prikazani ako je potrebno. Primjer: Nacrtane su samo vertikalne linije mreže i legende, ali su naslovi osa i nekoliko drugih komponenti uklonjeni iz područja.

animacija

Ključna funkcija ovdje je tranzicija_states(), ona spaja odvojene statičke grafove. view_follow() se koristi za crtanje linija mreže.

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

Renderiranje

Nakon što je animacija kreirana i pohranjena u objektu anim, vrijeme je da se prikaže pomoću funkcije animate(). Renderer koji se koristi u animate() može se razlikovati ovisno o vrsti izlazne datoteke koja je potrebna.

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 )

rezultat

Kreirajte animirane histograme koristeći R

Kao što vidite, ništa komplikovano. Cijeli projekat je dostupan u moj GitHub, možete ga koristiti kako vam odgovara.

Skillbox preporučuje:

izvor: www.habr.com

Dodajte komentar