Oħloq istogrammi animati billi tuża R

Oħloq istogrammi animati billi tuża R

Bar charts animati li jistgħu jiġu inkorporati direttament f'post fuq kwalunkwe websajt qed isiru dejjem aktar popolari. Huma juru d-dinamika tal-bidliet fi kwalunkwe karatteristika fuq ċertu żmien u jagħmlu dan b'mod ċar. Ejja naraw kif toħloqhom billi tuża pakketti R u ġeneriċi.

Skillbox jirrakkomanda: Kors prattiku "Żviluppatur Python mill-bidu".

Infakkrukom: għall-qarrejja kollha ta '"Habr" - skont ta' 10 rublu meta tirreġistra fi kwalunkwe kors ta 'Skillbox billi tuża l-kodiċi promozzjonali "Habr".

Pakketti

Għandna bżonn pakketti f'R:

Dawn it-tnejn huma estremament meħtieġa. Barra minn hekk, tidyverse, janitor u skali se jkunu meħtieġa biex jimmaniġġjaw id-dejta, inaddfu l-firxa u jifformattjaw kif xieraq.

Data

Is-sett tad-dejta oriġinali li se nużaw f'dan il-proġett huwa mniżżel mill-websajt tal-Bank Dinji. Hawn huma - Data tal-Bank Dinji. L-istess data, jekk għandek bżonnha lesta, tista' titniżżel minn folders tal-proġett.

X'tip ta' informazzjoni hija din? Il-kampjun fih il-valur tal-PGD tal-biċċa l-kbira tal-pajjiżi għal diversi snin (mill-2000 sal-2017).

Ipproċessar tad-dejta

Aħna se nużaw il-kodiċi mibgħut hawn taħt biex nippreparaw il-format tad-dejta meħtieġ. Aħna naddfu l-ismijiet tal-kolonni, inbiddlu n-numri f'format ta 'numri, u nikkonverti d-data billi tuża l-funzjoni gather(). Aħna niffrankaw dak kollu li jiġi riċevut f'gdp_tidy.csv għal aktar użu.

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

Istogrammi animati

Il-ħolqien tagħhom jeħtieġ żewġ stadji:

  • Tpinġi ta' sett komplut ta' istogrammi attwali bl-użu ta' ggplot2.
  • Anima l-istogrammi statiċi b'parametri mixtieqa bl-użu ta' gganimate.

Il-pass finali huwa li tirrendi l-animazzjoni fil-format mixtieq, inklużi GIF jew MP4.

Tagħbija tal-libreriji

  • librerija (tidyverse)
  • librerija (gganimate)

Ġestjoni tad-dejta

F'dan il-pass, għandek bżonn tiffiltra d-dejta biex tikseb l-aqwa 10 pajjiżi għal kull sena. Ejja nżidu diversi kolonni li jippermettulna nuru leġġenda għall-istogramma.

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

Bini ta' istogrammi statiċi

Issa li għandna pakkett tad-dejta fil-format meħtieġ, nibdew niġbdu istogrammi statiċi. Informazzjoni bażika - l-aqwa 10 pajjiżi b'PDG massimu għall-intervall ta 'żmien magħżul. Aħna noħolqu graffs għal kull sena.

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

Il-ħolqien ta' plottijiet bl-użu ta' ggplot2 huwa sempliċi ħafna. Kif tistgħu taraw fit-taqsima tal-kodiċi ta 'hawn fuq, hemm diversi punti ewlenin bil-funzjoni theme(). Huma meħtieġa sabiex l-elementi kollha janimaw mingħajr problemi. Xi wħud minnhom jistgħu ma jintwerewx jekk meħtieġ. Eżempju: Il-linji tal-grilja vertikali u l-leġġendi biss huma mfassla, iżda t-titoli tal-assi u diversi komponenti oħra jitneħħew miż-żona.

Animazzjoni

Il-funzjoni ewlenija hawnhekk hija transition_states(), hija tgħaqqad flimkien graffs statiċi separati. view_follow() tintuża biex tiġbed linji tal-grilja.

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

Rendiment

Ladarba l-animazzjoni tinħoloq u tinħażen fl-oġġett anim, wasal iż-żmien li tirrendiha bl-użu tal-funzjoni animate(). Ir-renderer użat f'animate() jista 'jkun differenti skont it-tip ta' fajl tal-output meħtieġ.

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 )

Riżultat

Oħloq istogrammi animati billi tuża R

Kif tistgħu taraw, xejn ikkumplikat. Il-proġett kollu huwa disponibbli fi GitHub tiegħi, tista 'tużaha kif tara xieraq.

Skillbox jirrakkomanda:

Sors: www.habr.com

Żid kumment