Kreye istogram anime lè l sèvi avèk R

Kreye istogram anime lè l sèvi avèk R

Tablo anime ki ka entegre dirèkteman nan yon pòs sou nenpòt sit entènèt yo ap vin de pli zan pli popilè. Yo montre dinamik chanjman nan nenpòt karakteristik sou yon sèten tan epi fè sa klèman. Ann wè ki jan yo kreye yo lè l sèvi avèk pakè R ak jenerik.

Skillbox rekòmande: Kou pratik "Python devlopè nan grafouyen".

Nou raple: pou tout lektè "Habr" - yon rabè nan 10 rubles lè w ap enskri nan nenpòt kou Skillbox lè l sèvi avèk kòd pwomosyon "Habr".

Pakè

Nou bezwen pakè nan R:

De sa yo trè nesesè. Anplis de sa, tidyverse, janitor ak balans yo pral oblije jere done yo, netwaye etalaj la ak fòma kòmsadwa.

Done

Se done orijinal nou pral itilize nan pwojè sa a telechaje sou sit entènèt Bank Mondyal la. Men yo - Done Bank Mondyal. Done yo menm, si ou bezwen li pare-fè, ka telechaje soti nan dosye pwojè yo.

Ki kalite enfòmasyon sa a? Echantiyon an gen valè GDP nan pifò peyi yo pou plizyè ane (soti nan 2000 a 2017).

Done pwosesis

Nou pral sèvi ak kòd ki afiche anba a pou prepare fòma done ki nesesè yo. Nou netwaye non kolòn yo, vire nimewo yo nan yon fòma nimewo, epi konvèti done yo lè l sèvi avèk fonksyon gather() la. Nou sove tout sa yo resevwa nan gdp_tidy.csv pou plis itilize.

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

Istogram anime

Kreyasyon yo mande de etap:

  • Trase yon seri konplè istogram aktyèl lè l sèvi avèk ggplot2.
  • Anime istogram estatik ak paramèt vle lè l sèvi avèk gganimate.

Etap final la se rann animasyon an nan fòma a vle, ki gen ladan GIF oswa MP4.

Chaje bibliyotèk

  • bibliyotèk (tidyverse)
  • bibliyotèk (gganimate)

Jesyon done

Nan etap sa a, ou bezwen filtre done yo pou jwenn 10 peyi yo pi wo pou chak ane. Ann ajoute plizyè kolòn ki pral pèmèt nou montre yon lejand pou istogram la.

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

Bati istogram estatik

Kounye a ke nou gen yon pake done nan fòma obligatwa a, nou kòmanse trase istogram estatik. Enfòmasyon debaz - 10 peyi ki gen pi gwo GDP pou entèval tan chwazi a. Nou kreye graf pou chak ane.

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

Kreye trase lè l sèvi avèk ggplot2 se trè senp. Kòm ou ka wè nan seksyon kòd ki anwo a, gen plizyè pwen kle ak fonksyon tèm (). Yo nesesè pou tout eleman anime san pwoblèm. Kèk nan yo ka pa parèt si sa nesesè. Egzanp: Se sèlman liy kadriyaj vètikal yo ak lejand yo trase, men tit aks yo ak plizyè lòt konpozan yo retire nan zòn nan.

Animasyon

Fonksyon kle isit la se transition_states(), li koud ansanm graf estatik separe. view_follow() yo itilize pou trase liy kadriyaj.

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

Rann

Yon fwa yo kreye ak estoke animasyon an nan objè anim, li se tan pou rann li lè l sèvi avèk fonksyon anime () la. Rendu ki itilize nan anime () ka diferan selon kalite fichye pwodiksyon ki nesesè yo.

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 )

Rezilta

Kreye istogram anime lè l sèvi avèk R

Kòm ou ka wè, pa gen anyen konplike. Tout pwojè a disponib nan GitHub mwen an, ou ka sèvi ak li jan ou wè anfòm.

Skillbox rekòmande:

Sous: www.habr.com

Add nouvo kòmantè