Hozzon létre animált hisztogramokat az R használatával

Hozzon létre animált hisztogramokat az R használatával

Egyre népszerűbbek az animált oszlopdiagramok, amelyek közvetlenül beágyazhatók bármely webhely bejegyzésébe. Megjelenik bármely jellemző változásának dinamikáját egy bizonyos idő alatt, és ezt egyértelműen. Nézzük meg, hogyan hozhatjuk létre őket R és általános csomagok használatával.

A Skillbox a következőket ajánlja: Gyakorlati tanfolyam "Python fejlesztő a semmiből".

Emlékeztetünk: a "Habr" minden olvasója számára - 10 000 rubel kedvezmény, ha a "Habr" promóciós kóddal bármely Skillbox tanfolyamra jelentkezik.

csomagok

Csomagokra van szükségünk R-ben:

Ez a kettő rendkívül szükséges. Ezenkívül tidyverse, házmester és mérleg szükséges az adatok kezeléséhez, a tömb megtisztításához és ennek megfelelő formázásához.

Adat

Az eredeti adatkészlet, amelyet ebben a projektben használunk, letölthető a Világbank webhelyéről. Itt vannak - WorldBank adatok. Ugyanezek az adatok, ha szükség van rá készen, letölthetők innen projekt mappák.

Ez milyen információ? A minta a legtöbb ország GDP-értékét tartalmazza több évre (2000-től 2017-ig).

Adatfeldolgozás

A szükséges adatformátum elkészítéséhez az alább közzétett kódot használjuk. Töröljük az oszlopneveket, a számokat számformátumba alakítjuk, és az adatokat a collection() függvény segítségével konvertáljuk. Mindent elmentünk a gdp_tidy.csv fájlba további felhasználás céljából.

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

Animált hisztogramok

Létrehozásuk két szakaszt igényel:

  • A tényleges hisztogramok teljes halmazának ábrázolása a ggplot2 segítségével.
  • Statikus hisztogramok animálása a kívánt paraméterekkel a gganimate segítségével.

Az utolsó lépés az animáció kívánt formátumban való megjelenítése, beleértve a GIF-et vagy MP4-et.

Könyvtárak betöltése

  • könyvtár (rendezett)
  • könyvtár (gganimate)

Adatkezelés

Ebben a lépésben szűrnie kell az adatokat, hogy minden évben megkapja a 10 legjobb országot. Adjunk hozzá néhány oszlopot, amelyek lehetővé teszik a hisztogram jelmagyarázatának megjelenítését.

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

Statikus hisztogramok készítése

Most, hogy van egy adatcsomagunk a szükséges formátumban, elkezdjük a statikus hisztogramok rajzolását. Alapvető információk – a 10 legjobb ország a maximális GDP-vel a kiválasztott időintervallumban. 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 diagramok létrehozása a ggplot2 használatával nagyon egyszerű. Amint a fenti kódrészletben látható, a theme() függvénynek számos kulcsfontosságú pontja van. Szükségesek ahhoz, hogy minden elem probléma nélkül éljen. Szükség esetén előfordulhat, hogy egyesek nem jelennek meg. Példa: Csak a függőleges rácsvonalak és jelmagyarázatok rajzolódnak ki, de a tengelyek címei és számos egyéb összetevő eltávolításra kerül a területről.

élénkség

A kulcsfüggvény itt a transfer_states(), amely különálló statikus gráfokat fűz össze. A view_follow() rácsvonalak rajzolására szolgál.

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

Rendering

Miután az animációt létrehoztuk és eltároltuk az anim objektumban, ideje renderelni az animáció() függvény segítségével. Az animate()-ben használt renderer a kívánt kimeneti fájl típusától függően eltérő lehet.

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

Hozzon létre animált hisztogramokat az R használatával

Mint látható, semmi bonyolult. A teljes projekt elérhető itt a GitHubomat, saját belátása szerint használhatja.

A Skillbox a következőket ajánlja:

Forrás: will.com

Hozzászólás