Búðu til hreyfimyndir með því að nota R

Búðu til hreyfimyndir með því að nota R

Hreyfimynduð súlurit sem hægt er að fella beint inn í færslu á hvaða vefsíðu sem er eru að verða sífellt vinsælli. Þeir sýna gangverki breytinga á hvaða eiginleikum sem er yfir ákveðinn tíma og gera þetta greinilega. Við skulum sjá hvernig á að búa þá til með því að nota R og almenna pakka.

Skillbox mælir með: Verklegt námskeið „Python verktaki frá grunni“.

Við minnum á: fyrir alla Habr lesendur - 10 rúblur afsláttur þegar þú skráir þig á hvaða Skillbox námskeið sem er með því að nota Habr kynningarkóðann.

Pakkar

Okkur vantar pakka í R:

Þetta tvennt er ákaflega nauðsynlegt. Auk þess þarf snyrtivörur, húsvörður og vogir til að stjórna gögnunum, hreinsa upp fylkið og forsníða í samræmi við það.

Gögn

Upprunalega gagnasafnið sem við munum nota í þessu verkefni er hlaðið niður af vefsíðu Alþjóðabankans. Hér eru þau - Gögn Alþjóðabankans. Sömu gögn, ef þú þarft þau tilbúin, er hægt að hlaða niður frá verkefnamöppur.

Hvers konar upplýsingar eru þetta? Úrtakið inniheldur verðmæti landsframleiðslu flestra landa í nokkur ár (frá 2000 til 2017).

Gagnavinnsla

Við munum nota kóðann sem birtur er hér að neðan til að undirbúa nauðsynlegt gagnasnið. Við hreinsum dálkanöfnin, breytum tölunum í talnasnið og umbreytum gögnunum með því að nota gather() aðgerðina. Við vistum allt sem er móttekið í gdp_tidy.csv til frekari notkunar.

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

Hreyfimyndir

Tilurð þeirra krefst tveggja stiga:

  • Að teikna heildarsett af raunverulegum súluritum með því að nota ggplot2.
  • Hreyfi kyrrstæður súlurit með viðeigandi breytum með því að nota gganimate.

Lokaskrefið er að gera hreyfimyndina á æskilegu sniði, þar á meðal GIF eða MP4.

Hleður bókasöfnum

  • bókasafn (tidyverse)
  • bókasafn (gganimate)

Gagnastjórnun

Í þessu skrefi þarftu að sía gögnin til að fá efstu 10 löndin fyrir hvert ár. Við skulum bæta við nokkrum dálkum sem gera okkur kleift að sýna þjóðsögu fyrir súluritið.

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

Bygging á kyrrstæðum súluritum

Nú þegar við erum með gagnapakka á tilskildu sniði, byrjum við að teikna kyrrstæð súlurit. Grunnupplýsingar - topp 10 lönd með hámarks landsframleiðslu fyrir valið tímabil. Við búum til línurit fyrir 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"))

Það er mjög einfalt að búa til söguþræði með ggplot2. Eins og þú sérð í kóðahlutanum hér að ofan eru nokkrir lykilatriði með þema() aðgerðinni. Þau eru nauðsynleg svo að allir þættir lifni án vandræða. Sum þeirra birtast ef til vill ekki. Dæmi: Aðeins lóðréttar hnitanetslínur og skýringar eru teiknaðar, en ásheiti og nokkrir aðrir þættir eru fjarlægðir af svæðinu.

Fjör

Lykilfallið hér er transition_states(), það saumar saman aðskilin kyrrstæð línurit. view_follow() er notað til að teikna ristlínur.

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

Flutningur

Þegar hreyfimyndin er búin til og geymd í anim hlutnum er kominn tími til að gera það með því að nota animate() aðgerðina. Sýndarinn sem notaður er í animate() getur verið mismunandi eftir tegund úttaksskráar sem krafist er.

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 )

Niðurstaðan

Búðu til hreyfimyndir með því að nota R

Eins og þú sérð, ekkert flókið. Allt verkefnið er fáanlegt í GitHub minn, þú getur notað það eins og þér sýnist.

Skillbox mælir með:

Heimild: www.habr.com

Bæta við athugasemd