Luo animoituja histogrammeja käyttämällä R

Luo animoituja histogrammeja käyttämällä R

Animoidut pylväskaaviot, jotka voidaan upottaa suoraan minkä tahansa verkkosivuston viestiin, ovat tulossa yhä suositummiksi. Ne näyttävät minkä tahansa ominaisuuksien muutosten dynamiikan tietyn ajan kuluessa ja tekevät tämän selvästi. Katsotaanpa, kuinka ne luodaan R- ja geneeristen pakettien avulla.

Skillbox suosittelee: Käytännön kurssi "Python-kehittäjä tyhjästä".

Muistutamme sinua: kaikille "Habrin" lukijoille - 10 000 ruplan alennus ilmoittautuessaan mille tahansa Skillbox-kurssille "Habr" -tarjouskoodilla.

paketit

Tarvitsemme paketteja R:ssä:

Nämä kaksi ovat erittäin tarpeellisia. Lisäksi tarvitaan tidyverse, talonmies ja vaaka tietojen hallintaan, taulukon siivoamiseen ja sen mukaiseen muotoiluun.

Tiedot

Alkuperäinen tietojoukko, jota käytämme tässä projektissa, on ladattu Maailmanpankin verkkosivuilta. Täällä he ovat - Maailmanpankin tiedot. Samat tiedot, jos tarvitset niitä valmiina, voidaan ladata osoitteesta projektikansiot.

Millaista tietoa tämä on? Otos sisältää useimpien maiden BKT-arvon useiden vuosien ajalta (2000-2017).

Tietojenkäsittely

Käytämme alla olevaa koodia tarvittavan tietomuodon valmistelemiseen. Tyhjennämme sarakkeiden nimet, muunnamme numerot numeromuotoon ja muunnamme tiedot kerätä()-funktiolla. Tallennamme kaiken vastaanotetun tiedostoon gdp_tidy.csv myöhempää käyttöä varten.

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

Animoidut histogrammit

Niiden luominen vaatii kaksi vaihetta:

  • Piirrä täydellinen sarja todellisia histogrammeja käyttämällä ggplot2:ta.
  • Animoi staattiset histogrammit halutuilla parametreilla käyttämällä gganimatea.

Viimeinen vaihe on tehdä animaatio halutussa muodossa, mukaan lukien GIF tai MP4.

Ladataan kirjastoja

  • kirjasto (siivous)
  • kirjasto (gganimate)

Tiedonhallinta

Tässä vaiheessa sinun on suodatettava tiedot saadaksesi kunkin vuoden 10 parasta maata. Lisätään useita sarakkeita, joiden avulla voimme näyttää histogrammin selitteen.

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

Staattisten histogrammien rakentaminen

Nyt kun meillä on tietopaketti vaaditussa muodossa, alamme piirtää staattisia histogrammeja. Perustiedot - 10 parasta maata, joilla on suurin BKT valitulla aikavälillä. Luomme kaavioita joka vuosi.

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

Piirien luominen ggplot2:lla on hyvin yksinkertaista. Kuten yllä olevasta koodiosiosta näet, theme()-funktiolla on useita avainkohtia. Ne ovat välttämättömiä, jotta kaikki elementit animoituvat ilman ongelmia. Joitakin niistä ei välttämättä näytetä tarvittaessa. Esimerkki: Vain pystysuorat ruudukon viivat ja selitteet piirretään, mutta akselien otsikot ja useat muut komponentit poistetaan alueelta.

animaatio

Avaintoiminto tässä on transfer_states(), se liittää yhteen erilliset staattiset kaaviot. view_follow()-funktiota käytetään ruudukon viivojen piirtämiseen.

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

Renderointi

Kun animaatio on luotu ja tallennettu anim-objektiin, on aika renderoida se animaatio()-funktiolla. Animate()-funktiossa käytetty renderöijä voi olla erilainen vaadittavan tulostiedoston tyypin mukaan.

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 )

Tulos

Luo animoituja histogrammeja käyttämällä R

Kuten näette, ei mitään monimutkaista. Koko projekti on saatavilla osoitteessa minun GitHub, voit käyttää sitä parhaaksi katsomallasi tavalla.

Skillbox suosittelee:

Lähde: will.com

Lisää kommentti