Loome R-i abil animatsiooniga histogramme

Loome R-i abil animatsiooniga histogramme

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 „Python-arendaja algusest peale“.

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:

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 — WorldBank Data. Samad andmed, kui soovite neid valmis kujul, saadakse alla laadida projekti kaustast.

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

Loome R-i abil animatsiooniga histogramme

Kuidas näeme, midagi keerulist ei ole. Kogu projekt on saadaval minu GitHubis, saate seda kasutada, kuidas soovite.

Skillbox soovitab:

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster