Meitsje animearre histogrammen mei R

Meitsje animearre histogrammen mei R

Animearre staafdiagrammen dy't direkt kinne wurde ynbêde yn in post op elke webside wurde hieltyd populêrder. Se toane de dynamyk fan feroaringen yn alle skaaimerken oer in bepaalde tiid en dogge dit dúdlik. Litte wy sjen hoe't jo se kinne meitsje mei R en generyske pakketten.

Skillbox advisearret: Praktyske kursus "Python-ûntwikkelder fanôf it begjin".

Wy herinnerje: foar alle lêzers fan "Habr" - in koarting fan 10 roebel by it ynskriuwen fan in Skillbox-kursus mei de promoasjekoade "Habr".

Pakketten

Wy hawwe pakketten nedich yn R:

Dizze twa binne tige needsaaklik. Derneist sille tidyverse, janitor en skalen ferplicht wêze om de gegevens te behearjen, de array op te romjen en dêrop te formatteren.

data

De orizjinele dataset dy't wy sille brûke yn dit projekt is ynladen fan 'e webside fan' e Wrâldbank. Hjir binne se - Wrâldbank gegevens. Deselde gegevens, as jo se klear nedich binne, kinne wurde downloade fan projekt mappen.

Wat foar ynformaasje is dit? De stekproef befettet de BBP-wearde fan 'e measte lannen foar ferskate jierren (fan 2000 oant 2017).

Gegevens ferwurkjen

Wy sille de hjirûnder pleatste koade brûke om it fereaske gegevensformaat te meitsjen. Wy wiskje de kolomnammen, meitsje de nûmers yn in nûmerformaat, en konvertearje de gegevens mei de funksje sammelje () . Wy bewarje alles dat ûntfongen is yn gdp_tidy.csv foar fierder gebrûk.

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

Animearre histogrammen

Har skepping fereasket twa stadia:

  • It plotjen fan in folsleine set fan eigentlike histogrammen mei ggplot2.
  • Animearje statyske histogrammen mei winske parameters mei gganimate.

De lêste stap is om de animaasje yn it winske formaat te meitsjen, ynklusyf GIF of MP4.

It laden fan biblioteken

  • bibleteek (tidyverse)
  • bibleteek (gganimate)

Gegevensbehear

Yn dizze stap moatte jo de gegevens filterje om de top 10 lannen foar elk jier te krijen. Litte wy ferskate kolommen tafoegje wêrmei wy in leginde foar it histogram kinne werjaan.

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

Bouwe statyske histogrammen

No't wy in gegevenspakket hawwe yn it fereaske formaat, begjinne wy ​​​​statyske histogrammen te tekenjen. Basisynformaasje - top 10 lannen mei maksimale BBP foar it selekteare tiidynterval. Wy meitsje grafiken foar elk jier.

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

It meitsjen fan plots mei ggplot2 is heul ienfâldich. Sa't jo sjen kinne yn de koade seksje hjirboppe, der binne ferskate wichtige punten mei de tema () funksje. Se binne nedich sadat alle eleminten sûnder problemen animearje. Guon fan harren wurde miskien net werjûn as it nedich is. Foarbyld: Allinnich de fertikale rasterlinen en leginden wurde tekene, mar de astitels en ferskate oare komponinten wurde út it gebiet fuortsmiten.

Animaasje

De kaai funksje hjir is transition_states (), it stitches tegearre aparte statyske grafiken. view_follow() wurdt brûkt om rasterlinen te tekenjen.

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

Rendering

Sadree't de animaasje is oanmakke en opslein yn de anim foarwerp, it is op 'e tiid in render it mei help fan de animate () funksje. De renderer brûkt yn animate () kin ferskille ôfhinklik fan it type útfiertriem nedich.

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 )

resultaat

Meitsje animearre histogrammen mei R

Sa't jo sjen kinne, neat yngewikkeld. It hiele projekt is beskikber yn myn GitHub, Jo kinne it brûke as jo goed fine.

Skillbox advisearret:

Boarne: www.habr.com

Add a comment