Looge animeeritud histogramme, kasutades R-i

Looge animeeritud histogramme, kasutades R-i

Animeeritud tulpdiagrammid, mida saab manustada otse mis tahes veebisaidi postitusse, muutuvad üha populaarsemaks. Need näitavad mis tahes omaduste muutuste dünaamikat teatud aja jooksul ja teevad seda selgelt. Vaatame, kuidas neid R- ja üldpakettide abil luua.

Skillbox soovitab: Praktiline kursus "Pythoni arendaja nullist".

Tuletame meelde: kõigile "Habr" lugejatele - allahindlus 10 000 rubla, kui registreerute mis tahes Skillboxi kursusele, kasutades sooduskoodi "Habr".

Paketid

Vajame pakke kirjas R:

Need kaks on äärmiselt vajalikud. Lisaks on andmete haldamiseks, massiivi puhastamiseks ja vastavalt vormindamiseks vajalik tidyverse, majahoidja ja kaalud.

Andmed

Algne andmestik, mida me selles projektis kasutame, on alla laaditud Maailmapanga veebisaidilt. Siin nad on - Maailmapanga andmed. Samad andmed, kui vajate neid valmis kujul, saate alla laadida aadressilt projekti kaustad.

Mis info see on? Valim sisaldab enamiku riikide SKP väärtust mitme aasta jooksul (2000. aastast 2017. aastani).

Andmetöötlus

Nõutava andmevormingu ettevalmistamiseks kasutame allpool postitatud koodi. Tühjendame veergude nimed, muudame numbrid numbrivormingusse ja teisendame andmed kogumisfunktsiooni () abil. Salvestame kõik, mis saabuvad faili gdp_tidy.csv edasiseks kasutamiseks.

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

Animeeritud histogrammid

Nende loomine nõuab kahte etappi:

  • Täieliku tegelike histogrammide komplekti joonistamine ggplot2 abil.
  • Animeerida staatilisi histogramme soovitud parameetritega kasutades gganimate.

Viimane samm on animatsiooni renderdamine soovitud vormingus, sealhulgas GIF või MP4.

Teekide laadimine

  • raamatukogu (tidiverse)
  • raamatukogu (gganimate)

Andmehaldus

Selles etapis peate andmed filtreerima, et saada iga aasta 10 parimat riiki. Lisame mitu veergu, mis võimaldavad meil kuvada histogrammi legendi.

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

Staatiliste histogrammide loomine

Nüüd, kui meil on nõutavas vormingus andmepakett, hakkame joonistama staatilisi histogramme. Põhiteave – 10 parimat riiki, mille SKT valitud ajavahemikul on maksimaalne. Koostame iga aasta kohta graafikud.

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

Graafiku loomine ggplot2 abil on väga lihtne. Nagu näete ülaltoodud koodijaotises, on funktsioonil theme() mitu põhipunkti. Need on vajalikud, et kõik elemendid animeeriksid ilma probleemideta. Mõnda neist ei pruugita vajadusel kuvada. Näide: joonistatakse ainult vertikaalsed ruudustiku jooned ja legendid, kuid telgede pealkirjad ja mitmed muud komponendid eemaldatakse piirkonnast.

animafilm

Võtmefunktsioon on siin transfer_states(), mis ühendab eraldi staatilised graafikud. view_follow() kasutatakse ruudustikujoonte joonistamiseks.

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

Renderdamine

Kui animatsioon on loodud ja animatsiooniobjekti salvestatud, on aeg see renderdada funktsiooni animate() abil. Animate()-s kasutatav renderdaja võib olenevalt nõutava väljundfaili tüübist olla erinev.

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

Looge animeeritud histogramme, kasutades R-i

Nagu näete, pole midagi keerulist. Kogu projekt on saadaval minu GitHub, saate seda kasutada oma äranägemise järgi.

Skillbox soovitab:

Allikas: www.habr.com

Lisa kommentaar