Tsim Animated Histograms siv R

Tsim Animated Histograms siv R

Animated bar kab kos uas tuaj yeem kos ncaj qha rau hauv ib qho kev tshaj tawm ntawm txhua lub vev xaib tau dhau los ua neeg nyiam. Lawv tso saib qhov kev hloov pauv ntawm cov yam ntxwv ntawm ib lub sijhawm thiab ua qhov no kom meej. Cia peb saib yuav ua li cas los tsim lawv siv R thiab generic pob.

Skillbox pom zoo: Cov chav kawm siv tau "Python developer los ntawm kos".

Peb nco qab: rau txhua tus neeg nyeem Habr - 10 ruble luv nqi thaum tso npe rau hauv ib chav kawm Skillbox siv Habr promo code.

Cov pob khoom

Peb xav tau pob hauv R:

Ob qho no yog qhov tsim nyog heev. Tsis tas li ntawd, tidyverse, janitor thiab scales yuav tsum tau tswj cov ntaub ntawv, ntxuav cov array thiab format raws li.

cov ntaub ntawv

Cov ntaub ntawv qub uas peb yuav siv hauv qhov project no yog rub tawm los ntawm World Bank lub vev xaib. Ntawm no lawv yog - WorldBank Data. Tib cov ntaub ntawv, yog tias koj xav tau nws npaj ua, tuaj yeem rub tawm los ntawm project folders.

Cov ntaub ntawv no yog dab tsi? Cov qauv muaj tus nqi GDP ntawm ntau lub tebchaws rau ntau xyoo (los ntawm 2000 txog 2017).

Cov ntaub ntawv ua

Peb yuav siv cov cai tshaj tawm hauv qab no los npaj cov ntaub ntawv xav tau. Peb tshem cov npe ntawm kab, tig cov lej mus rau hauv tus lej hom, thiab hloov cov ntaub ntawv siv lub collect() muaj nuj nqi. Peb khaws txhua yam uas tau txais hauv gdp_tidy.csv rau kev siv ntxiv.

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

Animated histograms

Lawv creation yuav tsum muaj ob theem:

  • Kev teeb tsa ua tiav ntawm cov histograms tiag tiag siv ggplot2.
  • Animate zoo li qub histograms nrog qhov xav tau tsis siv gganimate.

Cov kauj ruam kawg yog ua kom cov animation hauv hom xav tau, suav nrog GIF lossis MP4.

Kev thauj cov tsev qiv ntawv

  • tsev qiv ntawv (tidyverse)
  • tsev qiv ntawv (ganimate)

Kev tswj cov ntaub ntawv

Hauv cov kauj ruam no, koj yuav tsum tau lim cov ntaub ntawv kom tau txais 10 lub teb chaws saum toj kawg nkaus rau txhua xyoo. Cia peb ntxiv ob peb kab uas yuav tso cai rau peb los tso saib cov lus dab neeg rau cov histogram.

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

Tsim static histograms

Tam sim no hais tias peb muaj cov ntaub ntawv pob nyob rau hauv hom ntawv yuav tsum tau, peb pib kos duab zoo li qub histograms. Cov ntaub ntawv yooj yim - sab saum toj 10 lub teb chaws nrog GDP siab tshaj plaws rau lub sijhawm xaiv. Peb tsim cov duab kos rau txhua xyoo.

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

Tsim cov phiaj xwm siv ggplot2 yog qhov yooj yim heev. Raws li koj tuaj yeem pom hauv tshooj cai saum toj no, muaj ob peb lub ntsiab lus tseem ceeb nrog lub ntsiab lus () ua haujlwm. Lawv tsim nyog kom tag nrho cov ntsiab lus animate yam tsis muaj teeb meem. Ib txhia ntawm lawv tej zaum yuav tsis tshwm sim yog tias tsim nyog. Piv txwv li: Tsuas yog cov kab kab ntsug ntsug thiab cov lus dab neeg tau kos, tab sis cov npe axis thiab ob peb lwm cov khoom raug tshem tawm ntawm thaj chaw.

Kev Ua Si

Lub luag haujlwm tseem ceeb ntawm no yog transition_states(), nws stitches ua ke cais cov duab zoo li qub. view_follow() yog siv los kos kab kab.

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

Ntsev

Thaum cov animation yog tsim thiab khaws cia rau hauv cov khoom anim, nws yog lub sij hawm los muab nws siv lub animate() muaj nuj nqi. Lub renderer siv nyob rau hauv animate() yuav txawv nyob ntawm seb hom ntaub ntawv tso zis yuav tsum tau.

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 )

tshwm sim

Tsim Animated Histograms siv R

Raws li koj tau pom, tsis muaj dab tsi nyuab. Tag nrho qhov project yog muaj nyob rau hauv kuv GitHub, koj tuaj yeem siv nws raws li koj pom zoo.

Skillbox pom zoo:

Tau qhov twg los: www.hab.com

Ntxiv ib saib