
Animované sloupcové grafy, které lze vložit přímo do příspěvku na jakékoli webové stránce, jsou stále populárnější. Zobrazují dynamiku změn jakýchkoli charakteristik v průběhu určitého času a činí to jasně. Podívejme se, jak je vytvořit pomocí R a generických balíčků.
Skillbox doporučuje: Praktický kurz .
Připomínáme: pro všechny čtenáře "Habr" - sleva 10 000 rublů při zápisu do jakéhokoli kurzu Skillbox pomocí propagačního kódu "Habr".
Balíčky
Potřebujeme balíčky v R:
- ggplot2
Tito dva jsou nesmírně potřební. Kromě toho budou zapotřebí tidyverse, školník a váhy pro správu dat, vyčištění pole a odpovídající formátování.
Data
Původní datový soubor, který použijeme v tomto projektu, je stažen z webu Světové banky. Zde jsou - . Stejná data, pokud je potřebujete hotová, lze stáhnout z .
Co je to za informace? Vzorek obsahuje hodnotu HDP většiny zemí za několik let (od roku 2000 do roku 2017).
Zpracování dat
K přípravě požadovaného formátu dat použijeme níže uvedený kód. Vymažeme názvy sloupců, převedeme čísla do číselného formátu a převedeme data pomocí funkce collect(). Vše, co obdržíme, uložíme do gdp_tidy.csv pro další použití.
library(tidyverse)
library(janitor)
gdp <- read_csv("./data/GDP_Data.csv")
#vyberte požadované sloupce
HDP <- HDP %>% select(3:15)
#filtrovat pouze řádky zemí
HDP <- HDP[1:217,]
gdp_tidy <- HDP %>%
mutate_at(vars(obsahuje("YR")),as.numeric) %>%
shromáždit(rok,hodnota,3:13) %>%
janitor::clean_names() %>%
mutate(rok = as.numeric(stringr::str_sub(rok,1,4)))
write_csv(gdp_tidy, "./data/gdp_tidy.csv")
Animované histogramy
Jejich vytvoření vyžaduje dvě fáze:
- Vykreslení kompletní sady skutečných histogramů pomocí ggplot2.
- Animujte statické histogramy s požadovanými parametry pomocí gganimate.
Posledním krokem je vykreslení animace v požadovaném formátu, včetně GIF nebo MP4.
Načítání knihoven
- knihovna (uklizený)
- knihovna (gganimate)
Správa dat
V tomto kroku musíte filtrovat data, abyste získali 10 nejlepších zemí pro každý rok. Přidejme několik sloupců, které nám umožní zobrazit legendu k histogramu.
gdp_tidy <- read_csv("./data/gdp_tidy.csv")
gdp_formatted <- gdp_tidy %>%
group_by(rok) %>%
# * 1 umožňuje mít při posuvu neceločíselné hodnosti
mutate(rank = rank(-hodnota),
Hodnota_rel = hodnota/hodnota[pořadí==1],
Value_lbl = paste0(" ",zaokrouhleno(hodnota/1e9))) %>%
group_by(název_země) %>%
filtr(pořadí <=10) %>%
rozdělit()
Vytváření statických histogramů
Nyní, když máme datový balíček v požadovaném formátu, začneme kreslit statické histogramy. Základní informace - top 10 zemí s maximálním HDP za zvolený časový interval. Pro každý rok vytváříme grafy.
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áření grafů pomocí ggplot2 je velmi jednoduché. Jak můžete vidět v části kódu výše, funkce theme() má několik klíčových bodů. Jsou nezbytné, aby se všechny prvky bez problémů oživily. Některé z nich se v případě potřeby nemusí zobrazit. Příklad: Jsou nakresleny pouze svislé čáry mřížky a legendy, ale nadpisy os a několik dalších komponent jsou z oblasti odstraněny.
animace
Klíčovou funkcí je zde transition_states(), která spojuje samostatné statické grafy. view_follow() se používá ke kreslení čar mříž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")
Vykreslování
Jakmile je animace vytvořena a uložena v objektu anim, je čas ji vykreslit pomocí funkce animate(). Vykreslovací modul použitý v animate() se může lišit v závislosti na typu požadovaného výstupního souboru.
Gif
# For GIF
animovat(anim, 200, fps = 20, šířka = 1200, výška = 1000,
renderer = gifski_renderer("gganim.gif"))
MP4
# For MP4
animovat(anim, 200, fps = 20, šířka = 1200, výška = 1000,
renderer = ffmpeg_renderer()) -> for_mp4
anim_save("animace.mp4", animace = pro_mp4)
Výsledek

Jak vidíte, nic složitého. Celý projekt je dostupný v , můžete jej použít, jak uznáte za vhodné.
Skillbox doporučuje:
- Dvouletý praktický kurz .
- Online kurz .
- Praktický roční kurz .
Zdroj: www.habr.com
