Bi karanîna R Histogramên Anîmasyon biafirînin

Bi karanîna R Histogramên Anîmasyon biafirînin

Nexşeyên barkêş ên anîmasyon ên ku dikarin rasterast di nav postek li ser her malperê de bêne bicîh kirin her ku diçe populer dibin. Ew dînamîkên guheztinê di her taybetmendiyekê de di demek diyar de nîşan didin û vê yekê zelal dikin. Ka em bibînin ka meriv wan çawa bi karanîna pakêtên R û gelemperî biafirîne.

Skillbox pêşniyar dike: Kursa pratîk "Pêşvebirê Python ji sifirê".

Em bînin bîra xwe: ji bo hemî xwendevanên "Habr" - dema ku hûn beşdarî qursek Skillbox-ê bi karanîna koda danasînê ya "Habr" têne qeyd kirin 10 rubleyan dakêşin.

Packages

Ji me re pakêtên di R de hewce ne:

Ev her du pir pêwîst in. Digel vê yekê, ji bo birêvebirina daneyan, paqijkirina rêzê û li gorî wê formata paqijkirinê, parêzger û terazûyan hewce dike.

Daneyên

Daneya eslî ya ku em ê di vê projeyê de bikar bînin ji malpera Banka Cîhanê tê daxistin. Li vir ew in - Daneyên Banka Cîhanê. Heman daneyan, ger hewcedariya we ya amade hebe, dikare jê were daxistin peldankên projeyê.

Ev çi zaniyarî ye? Nimûne nirxa GDP ya piraniya welatan ji bo çend salan (ji 2000 heta 2017) digire.

Danûstendina daneyê

Em ê koda ku li jêr hatî şandin bikar bînin da ku forma daneya pêwîst amade bikin. Em navên stûnan paqij dikin, jimareyan vediguherînin formek hejmarê, û bi karanîna fonksiyona berhev () daneyan vediguherînin. Em her tiştê ku di gdp_tidy.csv de tê wergirtin ji bo karanîna bêtir hilînin.

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

Histogramên anîmasyonî

Afirandina wan du qonaxan hewce dike:

  • Bi karanîna ggplot2 re komek bêkêmasî ya histogramên rastîn çêdikin.
  • Hîstogramên statîk bi parametreyên xwestî bi karanîna gganimate zindî bikin.

Pêngava paşîn ev e ku hûn anîmasyonê di forma xwestinê de, tevî GIF an MP4, pêşkêş bikin.

Barkirina pirtûkxaneyan

  • pirtûkxane (tidyverse)
  • pirtûkxane (gganimate)

Rêveberiya daneyan

Di vê gavê de, hûn hewce ne ku daneyan fîlter bikin da ku ji bo her sal 10 welatên pêşîn bistînin. Ka em çend stûnan lê zêde bikin ku dê rê bidin me ku efsaneyek ji bo histogramê nîşan bidin.

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

Avakirina histogramên statîk

Naha ku di forma pêdivî de pakêtek daneyê heye, em dest bi kişandina histogramên statîk dikin. Agahdariya bingehîn - 10 welatên top bi GDP-ya herî zêde ji bo navberê dema hilbijartî. Em ji bo her sal grafikan çêbikin.

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

Afirandina nexşeyan bi karanîna ggplot2 pir hêsan e. Wekî ku hûn di beşa kodê ya li jor de dibînin, bi fonksiyona tema() re gelek xalên sereke hene. Ew hewce ne ku hemî hêman bêyî pirsgirêk zindî bibin. Ger hewce be hin ji wan nayên xuyang kirin. Mînak: Tenê xêz û efsaneyên tevna vertîkal têne kişandin, lê sernavên eksê û çend pêkhateyên din ji deverê têne rakirin.

animation

Fonksiyona sereke li vir transition_states e (), ew grafikên statîk ên cihêreng li hev dicivîne. view_follow() ji bo xêzkirina xetên torê tê bikar anîn.

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

Dema ku anîmasyon di hêmana animê de hate afirandin û hilanîn, wextê wê ye ku ew bi karanîna fonksiyona animate() were pêşkêş kirin. Pêşkêşkera ku di animate() de tê bikar anîn, li gorî celebê pelê derketinê ya ku hewce dike dikare cûda be.

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 )

Di encama

Bi karanîna R Histogramên Anîmasyon biafirînin

Wekî ku hûn dikarin bibînin, tiştek tevlihev. Tevahiya projeyê tê de heye GitHub min, hûn dikarin wê wekî ku hûn rast dibînin bikar bînin.

Skillbox pêşniyar dike:

Source: www.habr.com

Add a comment