Ustvarite animirane histograme z uporabo R

Ustvarite animirane histograme z uporabo R

Animirani palični grafikoni, ki jih je mogoče vdelati neposredno v objavo na kateri koli spletni strani, postajajo vse bolj priljubljeni. Prikazujejo dinamiko sprememb katere koli značilnosti v določenem času in to naredijo jasno. Poglejmo, kako jih ustvariti z uporabo R in generičnih paketov.

Skillbox priporoča: Praktični tečaj "Python razvijalec iz nič".

Spomnimo: za vse bralce "Habr" - popust v višini 10 rubljev ob vpisu v kateri koli tečaj Skillbox s promocijsko kodo "Habr".

Paketi

Potrebujemo pakete v R:

To dvoje je izjemno potrebno. Poleg tega bodo za upravljanje podatkov, čiščenje matrike in ustrezno formatiranje potrebni tidyverse, hišnik in tehtnice.

Podatki

Izvirni nabor podatkov, ki ga bomo uporabili v tem projektu, je prenesen s spletne strani Svetovne banke. Tukaj so - Podatki Svetovne banke. Iste podatke, če jih potrebujete že pripravljene, lahko prenesete iz projektne mape.

Kakšna informacija je to? Vzorec vsebuje vrednost BDP večine držav za več let (od 2000 do 2017).

Obdelava podatkov

Za pripravo zahtevane oblike podatkov bomo uporabili kodo, objavljeno spodaj. Počistimo imena stolpcev, pretvorimo številke v številsko obliko in pretvorimo podatke s funkcijo gather(). Vse prejeto shranimo v gdp_tidy.csv za nadaljnjo uporabo.

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 ustvarjanje zahteva dve stopnji:

  • Izris celotnega niza dejanskih histogramov z uporabo ggplot2.
  • Animirajte statične histograme z želenimi parametri z uporabo gganimate.

Zadnji korak je upodabljanje animacije v želenem formatu, vključno z GIF ali MP4.

Nalaganje knjižnic

  • knjižnica (tidyverse)
  • knjižnica (gganimate)

Upravljanje s podatki

V tem koraku morate filtrirati podatke, da dobite 10 najboljših držav za vsako leto. Dodajmo več stolpcev, ki nam bodo omogočili prikaz legende 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()

Gradnja statičnih histogramov

Zdaj, ko imamo paket podatkov v zahtevani obliki, začnemo risati statične histograme. Osnovne informacije - 10 najboljših držav z največjim BDP v izbranem časovnem intervalu. Izdelamo grafe za vsako leto.

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

Ustvarjanje ploskev z uporabo ggplot2 je zelo preprosto. Kot lahko vidite v zgornjem razdelku kode, obstaja več ključnih točk s funkcijo theme(). Potrebni so, da vsi elementi brez težav animirajo. Nekateri od njih morda ne bodo prikazani, če je to potrebno. Primer: narisane so samo navpične mrežne črte in legende, vendar so naslovi osi in več drugih komponent odstranjeni iz območja.

animacija

Ključna funkcija tukaj je conversion_states(), ki združuje ločene statične grafe. view_follow() se uporablja za risanje mrežnih črt.

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

Upodabljanje

Ko je animacija ustvarjena in shranjena v objektu anim, je čas, da jo upodabljate s funkcijo animate(). Upodabljalnik, uporabljen v animate(), se lahko razlikuje glede na vrsto zahtevane izhodne datoteke.

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

Ustvarite animirane histograme z uporabo R

Kot lahko vidite, nič zapletenega. Celoten projekt je na voljo v moj GitHub, ga lahko uporabite, kot se vam zdi primerno.

Skillbox priporoča:

Vir: www.habr.com

Dodaj komentar