Vytvorte animované histogramy pomocou R

Vytvorte animované histogramy pomocou R

Animované stĺpcové grafy, ktoré možno vložiť priamo do príspevku na ľubovoľnej webovej stránke, sú čoraz populárnejšie. Zobrazujú dynamiku zmien akýchkoľvek charakteristík za určitý čas a robia to jasne. Pozrime sa, ako ich vytvoriť pomocou R a generických balíkov.

Skillbox odporúča: Praktický kurz "Vývojár Pythonu od nuly".

Pripomíname vám: pre všetkých čitateľov „Habr“ - zľava 10 000 rubľov pri registrácii do akéhokoľvek kurzu Skillbox pomocou propagačného kódu „Habr“.

balíčky

Potrebujeme balíky v R:

Títo dvaja sú mimoriadne potrební. Okrem toho bude potrebný poriadok, správca a váhy na správu údajov, vyčistenie poľa a príslušné formátovanie.

Dáta

Pôvodný súbor údajov, ktorý použijeme v tomto projekte, je stiahnutý z webovej stránky Svetovej banky. Tu sú - Údaje WorldBank. Rovnaké údaje, ak ich potrebujete hotové, je možné stiahnuť z priečinky projektu.

Čo je to za informácie? Vzorka obsahuje hodnotu HDP väčšiny krajín za niekoľko rokov (od roku 2000 do roku 2017).

Spracovanie dát

Na prípravu požadovaného formátu údajov použijeme kód uvedený nižšie. Vymažeme názvy stĺpcov, zmeníme čísla na číselný formát a prevedieme údaje pomocou funkcie collect(). Všetko prijaté v gdp_tidy.csv uložíme na ďalšie použitie.

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

Animované histogramy

Ich vytvorenie si vyžaduje dve fázy:

  • Vykreslenie kompletnej sady skutočných histogramov pomocou ggplot2.
  • Animujte statické histogramy s požadovanými parametrami pomocou gganimate.

Posledným krokom je vykreslenie animácie v požadovanom formáte vrátane GIF alebo MP4.

Načítavajú sa knižnice

  • knižnica (uprataný)
  • knižnica (gganimate)

Správa údajov

V tomto kroku musíte filtrovať údaje, aby ste získali 10 najlepších krajín pre každý rok. Pridajme niekoľko stĺpcov, ktoré nám umožnia zobraziť legendu k histogramu.

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

Vytváranie statických histogramov

Teraz, keď máme dátový balík v požadovanom formáte, začneme kresliť statické histogramy. Základné informácie - top 10 krajín s maximálnym HDP za zvolený časový interval. Vytvárame grafy pre každý rok.

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

Vytváranie grafov pomocou ggplot2 je veľmi jednoduché. Ako môžete vidieť v časti kódu vyššie, funkcia theme() má niekoľko kľúčových bodov. Sú potrebné, aby sa všetky prvky animovali bez problémov. Niektoré z nich sa v prípade potreby nemusia zobraziť. Príklad: Nakreslia sa iba zvislé čiary mriežky a legendy, ale z oblasti sa odstránia názvy osí a niekoľko ďalších komponentov.

animácie

Kľúčovou funkciou je tu transition_states(), spája samostatné statické grafy. view_follow() sa používa na kreslenie čiar mriežky.

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

Vykreslenie

Keď je animácia vytvorená a uložená v objekte anim, je čas ju vykresliť pomocou funkcie animate(). Renderer použitý v animate() sa môže líšiť v závislosti od typu požadovaného výstupného súboru.

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 )

Výsledok

Vytvorte animované histogramy pomocou R

Ako vidíte, nič zložité. Celý projekt je dostupný v môj GitHub, môžete ho použiť, ako uznáte za vhodné.

Skillbox odporúča:

Zdroj: hab.com

Pridať komentár