
Az animált hisztogrammok, amelyeket közvetlenül beágyazhatunk bármely weboldal publikációjába, egyre népszerűbbé válnak. Ezek vizuálisan ábrázolják bármely jellemző változásának dinamikáját egy meghatározott időszakon belül. Nézzük meg, hogyan készíthetjük el őket R és univerzális csomagok segítségével.
A Skillbox ajánlja: Gyakorlati kurzus .
Emlékeztetjük: minden «Habr» olvasónak 10 000 rubeles kedvezmény jár bármely Skillbox kurzus jelentkezésekor a «Habr» promóciós kód felhasználásával.
Csomagok
Szükségünk van csomagokra R-ben:
- ggplot2
Ezek a kettő rendkívül szükséges. Ezenkívül szükség lesz a tidyverse, janitor és scales csomagokra az adatok kezeléséhez, a tömb megtisztításához és a formázáshoz egyaránt.
Adatok
A projekt során használt adathalmazon a Világbank weboldaláról töltjük le. Íme, ezek: . Ugyanezeket az adatokat, ha szükséges, letöltheti a .
Milyen információ ez? A minta tartalmazza a legtöbb ország GDP-értékét több évre (2000 és 2017 között).
Adatfeldolgozás
A szükséges adatformátum előkészítéséhez az alábbi kódot fogjuk használni. Tisztítjuk az oszlopneveket, a számokat numerikus formátumra alakítjuk, és az adatok konvertálását a gather() függvény segítségével végezzük. Minden, amit kapunk, mentjük gdp_tidy.csv néven későbbi felhasználásra.
library(tidyverse)
library(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")
Animált hisztogrammok
Készítésük két lépést igényel:
- Teljes és aktuális hisztogramcsomag létrehozása ggplot2 segítségével.
- Statikus hisztogrammok animálása a kívánt paraméterekkel gganimate segítségével.
Az utolsó lépés — az animáció renderelése a kívánt formátumban, beleértve a GIF-et vagy az MP4-et.
Könyvtárak betöltése
- library(tidyverse)
- library(gganimate)
Adatkezelés
Ezen a lépésen szűrjük az adatokat a top 10 ország előállításához minden évben. Hozzáadunk néhány oszlopot, amelyek lehetővé teszik a hisztogram legenda megjelenítését.
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()
Statikus hisztogrammok készítése
Most, hogy megvan a szükséges adathalmaz a megfelelő formátumban, elkezdjük a statikus hisztogrammok rajzolását. Az alapinformáció — a legmagasabb GDP-vel rendelkező top 10 ország a választott időszakban. Grafikonokat készítünk minden évre.
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"))
A ggplot2 használatával grafikonok készítése nagyon egyszerű. Ahogyan az a fenti kódrészletben látható, több kulcsfontosságú szempont van a theme() függvénnyel. Ezek szükségesek ahhoz, hogy minden elem problémamentesen animálódjon. Néhány közülük elhagyható, ha szükséges. Például csak a függőleges rácsvonalak és a jelmagyarázatok jelennek meg, míg a tengelycímek és néhány más komponens eltávolításra kerül a területről.
Animáció
A kulcsfunkció itt a transition_states(), amely az egyes statikus grafikonokat összekapcsolja. A view_follow() a rácsvonalak megrajzolásához használható.
anim = staticplot + transition_states(év, transition_length = 4, state_length = 1) +
view_follow(fixed_x = TRUE) +
labs(title = 'GDP évente: {closest_state}',
subtitle = "Legjobb 10 Ország",
caption = "GDP milliárd USD-ban | Adatforrás: Világbank Adatok")
Renderelés
Miután az animációt létrehoztuk és elmentettük az anim objektumba, itt az ideje vizualizálni a animate() függvénnyel. Az animate() által használt renderer változó lehet az igényelt kimeneti fájltípus szerint.
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)
Eredmény

Ahogyan láthatjuk, semmi bonyolult. Az egész projekt elérhető a , szabadon felhasználható, ahogy jónak látod.
A Skillbox ajánlja:
- Kétéves gyakorlati tanfolyam .
- Online kurzus .
- Gyakorlati éves kurzus .
Forrás: habr.com
