Paghimo Animated Histograms Gamit ang R

Paghimo Animated Histograms Gamit ang R

Ang mga animated bar chart nga mahimong i-embed direkta sa usa ka post sa bisan unsang website nahimong mas popular. Gipakita nila ang dinamika sa mga pagbag-o sa bisan unsang mga kinaiya sa usa ka piho nga oras ug gihimo kini nga tin-aw. Atong tan-awon kung giunsa kini paghimo gamit ang R ug mga generic nga pakete.

Girekomenda sa Skillbox: Praktikal nga kurso "Python developer gikan sa scratch".

Gipahinumduman namon ikaw: alang sa tanan nga mga magbabasa sa "Habr" - usa ka diskwento sa 10 nga mga rubles kung nagpalista sa bisan unsang kurso sa Skillbox gamit ang code sa promosyon nga "Habr".

Mga pakete

Kinahanglan namon ang mga pakete sa R:

Kining duha gikinahanglan kaayo. Dugang pa, ang tidyverse, janitor ug mga timbangan gikinahanglan sa pagdumala sa datos, paglimpyo sa array ug pag-format sumala niana.

data

Ang orihinal nga dataset nga among gamiton niini nga proyekto gi-download gikan sa website sa World Bank. Ania sila - Data sa WorldBank. Ang parehas nga datos, kung kinahanglan nimo kini nga andam, mahimong ma-download gikan sa mga folder sa proyekto.

Unsa kini nga matang sa impormasyon? Ang sample naglangkob sa GDP nga kantidad sa kadaghanan nga mga nasud sulod sa pipila ka tuig (gikan sa 2000 ngadto sa 2017).

Pagproseso sa datos

Gamiton namo ang code nga gibutang sa ubos aron maandam ang gikinahanglan nga format sa datos. Atong limpyohan ang mga ngalan sa kolum, himoon ang mga numero ngadto sa pormat sa numero, ug i-convert ang datos gamit ang gather() function. Among gitipigan ang tanan nga madawat sa gdp_tidy.csv para sa dugang nga paggamit.

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 nga histograms

Ang ilang paglalang nagkinahanglan og duha ka yugto:

  • Pagplano ug kompletong set sa aktuwal nga histograms gamit ang ggplot2.
  • I-animate ang mga static nga histogram nga adunay gusto nga mga parameter gamit ang gganimate.

Ang katapusang lakang mao ang paghimo sa animation sa gusto nga format, lakip ang GIF o MP4.

Nagkarga sa mga librarya

  • librarya (limpyo)
  • librarya(ganimate)

Pagdumala sa datos

Niini nga lakang, kinahanglan nimo nga isala ang datos aron makuha ang nanguna nga 10 nga mga nasud matag tuig. Atong idugang ang pipila ka mga kolum nga magtugot kanato sa pagpakita sa usa ka leyenda alang sa 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()

Pagtukod og static histograms

Karon nga kami adunay usa ka pakete sa datos sa gikinahanglan nga format, magsugod kami sa pagdrowing og mga static nga histograms. Batakang impormasyon - top 10 nga mga nasud nga adunay pinakataas nga GDP alang sa pinili nga agwat sa panahon. Naghimo kami og mga graph alang sa matag tuig.

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

Ang paghimo og mga laraw gamit ang ggplot2 yano ra kaayo. Sama sa imong makita sa seksyon sa code sa ibabaw, adunay daghang mga yawe nga punto nga adunay tema () nga function. Kinahanglan sila aron ang tanan nga mga elemento mabuhi nga wala’y mga problema. Ang uban niini mahimong dili ipakita kung gikinahanglan. Pananglitan: Ang mga bertikal nga grid nga linya ug mga leyenda lamang ang gikuha, apan ang mga titulo sa axis ug uban pang mga sangkap gikuha gikan sa lugar.

Pagpanginabuhi

Ang yawe nga function dinhi mao ang transition_states(), kini nagtahi sa lainlain nga mga static nga mga graph. view_follow() gigamit sa pagdrowing og mga linya sa grid.

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

Paghubad

Sa higayon nga ang animation gihimo ug gitipigan sa anim nga butang, kini ang panahon sa paghubad niini gamit ang animate() function. Ang tighubad nga gigamit sa animate() mahimong lahi depende sa matang sa output file nga gikinahanglan.

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 )

resulta

Paghimo Animated Histograms Gamit ang R

Sama sa imong nakita, wala’y komplikado. Ang tibuok nga proyekto anaa sa akong GitHub, mahimo nimo kining gamiton sumala sa imong nakita nga angay.

Girekomenda sa Skillbox:

Source: www.habr.com

Idugang sa usa ka comment