Vytváříme animované histogramy pomocí R.

Vytváříme animované histogramy pomocí R.

Animované histogramy, které lze přímo integrovat do publikace na jakémkoli webu, se stávají stále populárnějšími. Ukazují dynamiku změn různých charakteristik během určitého časového období a dělají to přehledně. Podívejme se, jak je vytvořit pomocí R a univerzálních balíčků.

Skillbox doporučuje: Praktický kurz „Python developer z nuly“.

Připomínáme: pro všechny čtenáře "Habra" – sleva 10 000 korun při registraci na jakýkoli kurz Skillbox s promokódem "Habr".

Balíčky

Potřebujeme balíčky v R:

Tyto dva jsou nezbytné. Kromě toho budeme potřebovat tidyverse, janitor a scales pro správu dat, čištění a formátování dat.

Údaje

Původní datový set, který budeme v tomto projektu používat, se stahuje z webových stránek Světové banky. Tady jsou — WorldBank Data. Tato data, pokud je potřebujete ve zpracované podobě, si můžete stáhnout z adresáře projektu.

Jaké informace to jsou? Vzorek obsahuje HDP většiny zemí za několik let (od roku 2000 do 2017).

Zpracování dat

Použijeme kód uvedený níže pro přípravu požadovaného formátu dat. Čistíme názvy sloupců, převádíme čísla na číselný formát a konvertujeme data pomocí funkce gather(). Vše, co získáme, ukládáme do gdp_tidy.csv pro další použití.

knihovna(tidyverse)
knihovna(janitor)

gdp <- read_csv("./data/GDP_Data.csv")

#select required columns

gdp % select(3:15)

#filter only country rows

gdp <- gdp[1:217,]

gdp_tidy %
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

Jejich vytvoření vyžaduje dvě fáze:

  • Vytvoření úplného setu aktuálních histogramů pomocí ggplot2.
  • Animování statických histogramů s požadovanými parametry pomocí gganimate.

Posledním krokem je renderování animace v požadovaném formátu, včetně GIF nebo MP4.

Načítání knihoven

  • knihovna(tidyverse)
  • library(gganimate)

Správa dat

V tomto kroku je třeba filtrovat data, abyste získali top 10 zemí každého roku. Přidáme několik sloupců, které umožní zobrazit legendu pro histogram.

gdp_tidy <- read_csv("./data/gdp_tidy.csv")

gdp_formatted %
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 %
ungroup()

Vytvoření statických histogramů

Nyní, když máme datový balíček ve správném formátu, začneme kreslit statické histogramy. Základní informace — top 10 zemí s nejvyšším HDP za vybrané časové období. Grafy vytváříme pro 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áření grafů pomocí ggplot2 je velmi jednoduché. Jak můžete vidět v úseku kódu výše, existuje několik klíčových bodů s funkcí theme (). Ty jsou nezbytné pro bezproblémovou animaci všech prvků. Některé z nich je možné při potřebě ani nezobrazovat. Příklad: vykreslují se pouze vertikální čáry mřížky a legendy, zatímco názvy os a několik dalších komponentů se z úseku odstraňuje.

Animace

Klíčová funkce zde — transition_states(), spojuje jednotlivé statické grafy. view_follow () se používá k vykreslení čar mřížky.

anim = staticplot + transition_states(year, transition_length = 4, state_length = 1) +
view_follow(fixed_x = TRUE) +
labs(title = 'HDP za rok: {closest_state}',
subtitle = "Top 10 zemí",
caption = "HDP v miliardách USD | Zdroj dat: Světová banka")

Renderování

Jakmile je animace vytvořena a uložena v objektu anim, nastává čas ji vizualizovat pomocí funkce animate (). Renderer používaný ve funkci animate () může být odlišný v závislosti na typu požadovaného výstupního souboru.

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ýsledek

Vytváříme animované histogramy pomocí R.

Jak vidíme, nic složitého. Celý projekt je k dispozici na mém GitHubu, můžete jej používat podle vlastního uvážení.

Skillbox doporučuje:

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster