Sortu histograma animatuak R erabiliz

Sortu histograma animatuak R erabiliz

Edozein webgunetako argitalpen batean zuzenean txerta daitezkeen barra-diagrama animatuak gero eta ezagunagoak dira. Denbora jakin batean edozein ezaugarriren aldaketen dinamika erakusten dute eta hori argi egiten dute. Ikus dezagun nola sortu R eta pakete generikoak erabiliz.

Skillbox-ek gomendatzen du: Ikastaro praktikoa "Python garatzailea hutsetik".

Gogoratzen dugu: "Habr" irakurle guztientzat - 10 errubloko deskontua "Habr" promozio-kodea erabiliz Skillbox-eko edozein ikastarotan izena ematean.

Paketeak

R-n paketeak behar ditugu:

Bi hauek oso beharrezkoak dira. Horrez gain, tidyverse, janitor eta baskulak beharko dira datuak kudeatzeko, array garbitzeko eta horren arabera formateatzeko.

Datu

Proiektu honetan erabiliko dugun jatorrizko datu multzoa Munduko Bankuaren webgunetik deskargatzen da. Hemen daude - Munduko Bankuko Datuak. Datu berdinak, prest egin behar badituzu, hemendik deskargatu daitezke proiektuen karpetak.

Nolako informazioa da hau? Laginak herrialde gehienen BPGaren balioa jasotzen du hainbat urtetan (2000tik 2017ra).

Datuen tratamendua

Behean argitaratutako kodea erabiliko dugu beharrezko datu-formatua prestatzeko. Zutabeen izenak garbitzen ditugu, zenbakiak zenbaki formatuan bihurtzen ditugu eta bildu () funtzioa erabiliz datuak bihurtzen ditugu. Gdp_tidy.csv-n jasotako guztia gordetzen dugu gehiago erabiltzeko.

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

Histograma animatuak

Haien sorrerak bi fase behar ditu:

  • Benetako histogramen multzo osoa marraztea ggplot2 erabiliz.
  • Animatu histograma estatikoak nahi diren parametroekin gganimate erabiliz.

Azken urratsa animazioa nahi den formatuan errendatzea da, GIF edo MP4 barne.

Liburutegiak kargatzen

  • liburutegia (tidyverse)
  • liburutegia (gganimatu)

Datuen kudeaketa

Urrats honetan, datuak iragazi behar dituzu urte bakoitzeko 10 herrialde nagusiak lortzeko. Gehi ditzagun hainbat zutabe, histogramarako kondaira bat bistaratzeko aukera emango digutenak.

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

Histograma estatikoak eraikitzea

Orain datu pakete bat behar den formatuan daukagunez, histograma estatikoak marrazten hasiko gara. Oinarrizko informazioa - hautatutako denbora tarterako BPG maximoa duten 10 herrialde nagusiak. Urte bakoitzeko grafikoak sortzen ditugu.

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

ggplot2 erabiliz grafikoak sortzea oso erraza da. Goiko kodea atalean ikus dezakezun bezala, theme() funtzioarekin hainbat puntu gako daude. Beharrezkoak dira elementu guztiak arazorik gabe animatzeko. Baliteke horietako batzuk ez bistaratzea beharrezkoa bada. Adibidez: sareta bertikalak eta legendak bakarrik marrazten dira, baina ardatzen izenburuak eta beste hainbat osagai eremutik kentzen dira.

animazioa

Hemen gako-funtzioa transition_states() da, grafiko estatiko bereiziak elkartzen ditu. view_follow() sare-lerroak marrazteko erabiltzen da.

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

Errendatzea

Animazioa sortu eta anim objektuan gordetzen denean, animate() funtzioa erabiliz errendatzeko garaia da. Animate()-n erabiltzen den errendatzailea desberdina izan daiteke behar den irteera-fitxategi motaren arabera.

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 )

Emaitza

Sortu histograma animatuak R erabiliz

Ikusten duzun bezala, ezer konplikatua. Proiektu osoa eskuragarri dago nire GitHub, egoki ikusten duzun moduan erabil dezakezu.

Skillbox-ek gomendatzen du:

Iturria: www.habr.com

Gehitu iruzkin berria