Opret animerede histogrammer ved hjælp af R

Opret animerede histogrammer ved hjælp af R

Animerede søjlediagrammer, der kan indlejres direkte i et opslag på ethvert websted, bliver stadig mere populære. De viser dynamikken i ændringer i enhver egenskab over en vis tid og gør dette tydeligt. Lad os se, hvordan du opretter dem ved hjælp af R og generiske pakker.

Skillbox anbefaler: Praktisk kursus "Python-udvikler fra bunden".

Påmindelse: for alle læsere af "Habr" - en rabat på 10 rubler ved tilmelding til ethvert Skillbox-kursus ved hjælp af "Habr"-kampagnekoden.

pakker

Vi skal bruge pakker i R:

Disse to er yderst nødvendige. Derudover vil tidyverse, pedel og vægte være påkrævet for at administrere dataene, rydde op i arrayet og formatere i overensstemmelse hermed.

Data

Det originale datasæt, vi vil bruge i dette projekt, er downloadet fra Verdensbankens hjemmeside. Her er de - Verdensbankens data. De samme data, hvis du har brug for det færdiglavet, kan downloades fra projektmapper.

Hvilken slags information er dette? Stikprøven indeholder BNP-værdien for de fleste lande i flere år (fra 2000 til 2017).

Databehandling

Vi vil bruge koden nedenfor til at forberede det nødvendige dataformat. Vi rydder kolonnenavnene, omdanner tallene til et talformat og konverterer dataene ved hjælp af funktionen gather(). Vi gemmer alt, der modtages i gdp_tidy.csv til videre brug.

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

Animerede histogrammer

Deres skabelse kræver to faser:

  • Plotning af et komplet sæt af faktiske histogrammer ved hjælp af ggplot2.
  • Animer statiske histogrammer med ønskede parametre ved hjælp af gganimate.

Det sidste trin er at gengive animationen i det ønskede format, inklusive GIF eller MP4.

Indlæser biblioteker

  • bibliotek (tidyverse)
  • bibliotek(gganimate)

Datastyring

I dette trin skal du filtrere dataene for at få de 10 bedste lande for hvert år. Lad os tilføje flere kolonner, der giver os mulighed for at vise en forklaring til histogrammet.

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

Opbygning af statiske histogrammer

Nu hvor vi har en datapakke i det krævede format, begynder vi at tegne statiske histogrammer. Grundlæggende information - top 10 lande med maksimalt BNP for det valgte tidsinterval. Vi laver grafer for hvert år.

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

At oprette plots ved hjælp af ggplot2 er meget enkelt. Som du kan se i kodeafsnittet ovenfor, er der flere nøglepunkter med funktionen theme(). De er nødvendige, så alle elementer animerer uden problemer. Nogle af dem vises muligvis ikke, hvis det er nødvendigt. Eksempel: Kun de lodrette gitterlinjer og tegnforklaringer tegnes, men aksetitlerne og flere andre komponenter fjernes fra området.

animation

Nøglefunktionen her er transition_states(), den syr separate statiske grafer sammen. view_follow() bruges til at tegne gitterlinjer.

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

Gengivelse

Når animationen er oprettet og gemt i anim-objektet, er det tid til at gengive den ved hjælp af animate()-funktionen. Den renderer, der bruges i animate() kan være forskellig afhængig af typen af ​​outputfil, der kræves.

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 )

Outcome

Opret animerede histogrammer ved hjælp af R

Som du kan se, intet kompliceret. Hele projektet er tilgængeligt i min GitHub, du kan bruge det, som du finder det passende.

Skillbox anbefaler:

Kilde: www.habr.com

Tilføj en kommentar