
Animatsiooniga histogrammid, mida saab otse igasse veebipostitusse integreerida, saavad üha populaarsemaks. Need näitavad, kuidas erinevad omadused muutuvad ajas, ning teevad seda visuaalselt. Vaadakem, kuidas neid R-i ja universaalsete paketidega luua.
Skillbox soovitab: Praktiline kursus .
Tuletame meelde: kõigile «Habra» lugejatele — 10 000 rubla soodustus, kui registreerite end Skillboxi mis tahes kursusele promokoodi «Habr» abil.
Pakettide
Me vajame R-is järgmisi pakette:
- ggplot2
Need kaks on äärmiselt vajalikud. Lisaks on vaja tidyverse, janitor ja scales, et andmeid hallata, andmestikku puhastada ja vastavalt vormindada.
Andmed
Otsitav andmekogum, mida me selle projekti jaoks kasutame, laaditakse alla Maailmapanga veebisaidilt. Siin need on — . Samad andmed, kui soovite neid valmis kujul, saadakse alla laadida .
Milline info see on? Valim sisaldab enamikus riikides aastate 2000–2017 jooksul kogutud SKP andmeid.
Andmete töötlemine
Kasutame allolevat koodi andmete vajaliku formaadi ettevalmistamiseks. Puhastame veergude nimetused, muundame numbrid numbrivormingusse ja konverteerime andmed funktsiooni gather() abil. Kõik saadud andmed salvestame faili gdp_tidy.csv edasisteks kasutamiseks.
raamatukogu(tidyverse)
raamatukogu(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")
Animatsioonilised histogrammid
Nende loomine nõuab kahte etappi:
- Kogu aktuaalse histogrammide komplekti koostamine, kasutades ggplot2.
- Staatiliste histogrammide animeerimine soovitud parameetrite abil gganimate.
Viimane samm — animatsiooni renderdamine soovitud formaadis, sealhulgas GIF või MP4.
Raamatukogude laadimine
- raamatukogu(tidyverse)
- library(gganimate)
Andmete haldamine
Sellel sammul tuleb andmed filtreerida, et saada igal aastal 10 parimat riiki. Lisame mõned veerud, mis võimaldavad kuvada histogrammi legendi.
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()
Staatiliste histogrammide koostamine
Nüüd, kui meil on andmepakett soovitud formaadis, alustame staatiliste histogrammide joonistamist. Põhiinfo — 10 parimat riiki kõige suurema SKP-ga valitud ajavahemiku jooksul. Graafikuid joonistame iga aasta kohta.
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"))
Graafikute loomine ggplot2 abil on üsna lihtne. Nagu näete ülaltoodud koodilõigus, on funktsioonis theme() mitu võtmeelementi. Need on vajalikud, et kõik elemendid saaksid probleemideta animeerida. Osasid neist saab vajadusel ka mitte kuvada. Näiteks kuvatakse ainult vertikaalsed ruudustiku jooned ja legendid, samas kui telgede pealkirjad ja mõned teised komponendid eemaldatakse lõigust.
Animatsioon
Siin on peamine funktsioon — transition_states(), mis ühendab eraldi staatilised graafikud. view_follow() kasutatakse ruudustiku joonte joonistamiseks.
anim = staticplot + transition_states(year, transition_length = 4, state_length = 1) +
view_follow(fixed_x = TRUE) +
labs(title = 'SKP aastas: {closest_state}',
subtitle = "10 parimat riiki",
caption = "SKP miljardites USD | Andmeallikas: Maailmapanga andmed")
Renderdamine
Pärast animatsiooni loomist ja salvestamist objekti anim, on aeg see visualiseerida funktsiooni animate() abil. Animate() kasutatav renderdaja võib varieeruda olenevalt vajalikust väljundfaili tüübist.
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)
Tulemus

Kuidas näeme, midagi keerulist ei ole. Kogu projekt on saadaval minu , saate seda kasutada, kuidas soovite.
Skillbox soovitab:
- Kaheaastane praktiline kursus .
- Veebikursus .
- Praktiline aastakursus .
Allikas: habr.com
