Kreu Viglajn Histogramojn Uzante R

Kreu Viglajn Histogramojn Uzante R

Viglaj stangaj diagramoj, kiuj povas esti enigitaj rekte en afiŝon en iu ajn retejo, fariĝas ĉiam pli popularaj. Ili montras la dinamikon de ŝanĝoj en iuj trajtoj dum certa tempo kaj faras tion klare. Ni vidu kiel krei ilin per R kaj senmarkaj pakaĵoj.

Skillbox rekomendas: Praktika kurso "Python-programisto de nulo".

Ni memorigas vin: por ĉiuj legantoj de "Habr" - rabato de 10 000 rubloj kiam oni enskribas en iu ajn Skillbox-kurso per la reklamkodo "Habr".

Pakoj

Ni bezonas pakaĵojn en R:

Ĉi tiuj du estas ekstreme necesaj. Krome, tidyverse, domzorgisto kaj pesilo estos postulataj por administri la datumojn, purigi la tabelon kaj formati laŭe.

datumoj

La originala datumaro, kiun ni uzos en ĉi tiu projekto, estas elŝutita de la retejo de la Monda Banko. Ĉi tie ili estas - Datumoj de Monda Banko. La samaj datumoj, se vi bezonas ĝin preta, povas esti elŝutitaj de projektaj dosierujoj.

Kia informo estas ĉi tio? La specimeno enhavas la MEP-valoron de plej multaj landoj dum pluraj jaroj (de 2000 ĝis 2017).

Datumtraktado

Ni uzos la kodon afiŝita sube por prepari la bezonatan datumformaton. Ni purigas la kolumnonomojn, turnas la nombrojn en nombroformaton kaj konvertas la datumojn per la funkcio gather(). Ni konservas ĉion, kio estas ricevita en gdp_tidy.csv por plua uzo.

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

Viglaj histogramoj

Ilia kreado postulas du stadiojn:

  • Grafikante kompletan aron de realaj histogramoj uzante ggplot2.
  • Vimigu senmovajn histogramojn kun dezirataj parametroj uzante gganimate.

La fina paŝo estas redoni la kuraĝigon en la dezirata formato, inkluzive GIF aŭ MP4.

Ŝargante bibliotekojn

  • biblioteko (ordiga)
  • biblioteko (gganimate)

Administrado de datumoj

En ĉi tiu paŝo, vi devas filtri la datumojn por akiri la plej bonajn 10 landojn por ĉiu jaro. Ni aldonu plurajn kolumnojn, kiuj permesos al ni montri legendon por la histogramo.

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

Konstruado de senmovaj histogramoj

Nun kiam ni havas datumpakaĵon en la bezonata formato, ni komencas desegni statikajn histogramojn. Bazaj informoj - plej bonaj 10 landoj kun maksimuma MEP por la elektita tempointervalo. Ni kreas grafikaĵojn por ĉiu jaro.

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

Krei intrigojn per ggplot2 estas tre simpla. Kiel vi povas vidi en la koda sekcio supre, estas pluraj ŝlosilaj punktoj kun la funkcio theme(). Ili estas necesaj por ke ĉiuj elementoj animu senprobleme. Kelkaj el ili eble ne montriĝas se necese. Ekzemplo: Nur la vertikalaj kradlinioj kaj legendoj estas desegnitaj, sed la aksaj titoloj kaj pluraj aliaj komponantoj estas forigitaj de la areo.

Animacio

La ŝlosila funkcio ĉi tie estas transition_states(), ĝi kunigas apartajn statikajn grafikaĵojn. view_follow() estas uzata por desegni kradliniojn.

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

Redonado

Post kiam la animacio estas kreita kaj konservita en la anim-objekto, estas tempo por bildigi ĝin per la funkcio animate(). La bildilo uzata en animate() povas esti malsama depende de la tipo de eligdosiero bezonata.

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 )

rezulto

Kreu Viglajn Histogramojn Uzante R

Kiel vi povas vidi, nenio komplika. La tuta projekto haveblas en mia GitHub, vi povas uzi ĝin laŭplaĉe.

Skillbox rekomendas:

fonto: www.habr.com

Aldoni komenton