Krijoni histograme të animuara duke përdorur R

Krijoni histograme të animuara duke përdorur R

Grafikët me shirita të animuar që mund të futen drejtpërdrejt në një postim në çdo faqe interneti po bëhen gjithnjë e më popullore. Ata shfaqin dinamikën e ndryshimeve në çdo karakteristikë gjatë një kohe të caktuar dhe e bëjnë këtë qartë. Le të shohim se si t'i krijojmë ato duke përdorur paketat R dhe gjenerike.

Skillbox rekomandon: Kurse praktike "Zhvilluesi i Python nga e para".

Kujtojmë: për të gjithë lexuesit e "Habr" - një zbritje prej 10 rubla kur regjistroheni në çdo kurs Skillbox duke përdorur kodin promovues "Habr".

Paketat

Na duhen paketa në R:

Këto të dyja janë jashtëzakonisht të nevojshme. Përveç kësaj, do të kërkohen rregullime, portier dhe peshore për të menaxhuar të dhënat, për të pastruar grupin dhe për të formatuar në përputhje me rrethanat.

Të dhëna

Të dhënat origjinale që do të përdorim në këtë projekt është shkarkuar nga faqja e internetit e Bankës Botërore. Këtu ata janë - Të dhënat e Bankës Botërore. Të njëjtat të dhëna, nëse ju nevojiten të gatshme, mund të shkarkohen nga dosjet e projektit.

Çfarë lloj informacioni është ky? Mostra përmban vlerën e PBB-së së shumicës së vendeve për disa vite (nga 2000 deri në 2017).

Përpunimin e të dhënave

Ne do të përdorim kodin e postuar më poshtë për të përgatitur formatin e kërkuar të të dhënave. Ne pastrojmë emrat e kolonave, i kthejmë numrat në një format numrash dhe i konvertojmë të dhënat duke përdorur funksionin collect(). Ne ruajmë gjithçka që merret në gdp_tidy.csv për përdorim të mëtejshëm.

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

Histograme të animuara

Krijimi i tyre kërkon dy faza:

  • Hartimi i një grupi të plotë të histogrameve aktuale duke përdorur ggplot2.
  • Animoni histogramet statike me parametrat e dëshiruar duke përdorur gganimate.

Hapi i fundit është të jepni animacionin në formatin e dëshiruar, duke përfshirë GIF ose MP4.

Duke ngarkuar bibliotekat

  • bibliotekë (i rregulluar)
  • bibliotekë (gganimate)

Menaxhimi i të dhënave

Në këtë hap, ju duhet të filtroni të dhënat për të marrë 10 vendet më të mira për çdo vit. Le të shtojmë disa kolona që do të na lejojnë të shfaqim një legjendë për histogramin.

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

Ndërtimi i histogrameve statike

Tani që kemi një paketë të dhënash në formatin e kërkuar, fillojmë të vizatojmë histograme statike. Informacioni bazë - 10 vendet kryesore me GDP maksimale për intervalin kohor të zgjedhur. Ne krijojmë grafikë për çdo vit.

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

Krijimi i parcelave duke përdorur ggplot2 është shumë i thjeshtë. Siç mund ta shihni në seksionin e kodit të mësipërm, ka disa pika kyçe me funksionin theme(). Ato janë të nevojshme në mënyrë që të gjithë elementët të gjallërojnë pa probleme. Disa prej tyre mund të mos shfaqen nëse është e nevojshme. Shembull: Janë vizatuar vetëm linjat vertikale të rrjetës dhe legjendat, por titujt e boshteve dhe disa përbërës të tjerë janë hequr nga zona.

gjallëri

Funksioni kryesor këtu është transition_states(), ai bashkon grafikë të veçantë statikë. view_follow() përdoret për të vizatuar linjat e rrjetit.

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

Pasqyrimi

Pasi animacioni të krijohet dhe ruhet në objektin anim, është koha për ta dhënë atë duke përdorur funksionin animate(). Renderer-i i përdorur në animate() mund të jetë i ndryshëm në varësi të llojit të skedarit dalës që kërkohet.

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 )

Result

Krijoni histograme të animuara duke përdorur R

Siç mund ta shihni, asgjë e komplikuar. I gjithë projekti është në dispozicion në GitHub-i im, mund ta përdorni sipas dëshirës.

Skillbox rekomandon:

Burimi: www.habr.com

Shto një koment