Krijimi i histogramave të animuara me ndihmën e R

Krijimi i histogramave të animuara me ndihmën e R

Histogramat e animuar që mund të integrohen direkt në publikime në çdo faqe webi po bëhen gjithnjë e më të njohura. Ato shfaqin dinamikën e ndryshimeve të karakteristikave të ndryshme për një periudhë të caktuar kohe dhe e bëjnë këtë në një mënyrë vizuale. Le të shohim se si t'i krijojmë ato me ndihmën e R dhe paketave universale.

Skillbox rekomandon: Kurs praktik "Zhvillues Python nga zero".

Kujtojmë: për të gjithë lexuesit e «Habra» — zbritje prej 10,000 rublesh për regjistrimin në çdo kurs Skillbox me kodin promovues «Habr».

Paketa

Na duhen paketat në R:

Këto dy janë thelbësore. Gjithashtu, do të nevojiten tidyverse, janitor dhe scales për menaxhimin e të dhënave, pastrimin e grupeve dhe formatimin përkatës.

Të dhënat

Seti origjinal i të dhënave që do të përdorim në këtë projekt merret nga faqja e Bankës Botërore. Ja ata — Të Dhënat e Bankës Botërore. Të njëjtat të dhëna, nëse ju nevojiten në formatin e gatshëm, mund të shkarkohen nga folderi i projektit.

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

Përpunimi i të dhënave

Ne do të përdorim kodin e vendosur më poshtë për të përgatitur formatin e nevojshëm të të dhënave. Pastroni emrat e kolonave, shndërroni numrat në format numerik dhe konvertoni të dhënat me funksionin gather(). Çdo gjë që fitohet, ruhet në gdp_tidy.csv për përdorim të mëtejshëm.

biblioteka(tidyverse)
biblioteka(janitor)

gdp <- read_csv("./data/GDP_Data.csv")

#select required columns

gdp % select(3:15)

#filter only country rows

gdp <- gdp[1:217,]

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

Histogramat e animuar

Krijimi i tyre kërkon dy etapa:

  • Ndërtimi i një seti të plotë të histogramave statike me përdorimin e ggplot2.
  • Animimi i histogramave statike me parametrat e dëshiruara përmes gganimate.

Hapi përfundimtar — renderimi i animacionit në formatin e dëshiruar, duke përfshirë GIF ose MP4.

Ngarkimi i biblioteka

  • biblioteka(tidyverse)
  • library(gganimate)

Menaxhimi i të dhënave

Në këtë hap duhet të filtrojmë të dhënat për të marrë 10 vendet kryesore për çdo vit. Do të shtojmë disa kolona që do të lejojnë shfaqjen e legjendës për histogramin.

gdp_tidy <- read_csv("./data/gdp_tidy.csv")

gdp_formatted %
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 %
ungroup()

Ndërtimi i histogramave statike

Tani që kemi paketen e të dhënave në formatin e nevojshëm, fillojmë vizatimin e histogramave statike. Informacioni bazë — 10 vendet kryesore me PBB-në më të lartë për periudhën e zgjedhur. Grafikat do të ndërtohen 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"))

Të ndërtosh grafika me ggplot2 është shumë e thjeshtë. Siç mund ta shihni në fragmentin e kodit më sipër, ka disa aspekte kyçe me funksionin theme (). Ato janë të nevojshme për të garantuar që të gjithë elementet të animohen pa probleme. Disa prej tyre mund të mos shfaqen sipas nevojës. Shembull: vizatohen vetëm vijat vertikale të gridit dhe legjendat, ndërsa titujt e boshtit dhe disa komponente të tjera hiqen nga skena.

Animacioni

Funksioni kyç këtu është transition_states(), i cili bashkon grafikët statikë të veçanta. view_follow () përdoret për të vizatuar vijat e gridit.

anim = staticplot + transition_states(viti, transition_length = 4, state_length = 1) +
view_follow(fixed_x = TRUE) +
labs(title = 'GDP për Vit: {closest_state}',
subtitle = "10 Shtetet Kryesore",
caption = "GDP në Miliarda USD | Burimi i Dhënave: Të Dhëna nga Banka Botërore")

Rendering

Pasi animacioni është krijuar dhe ruajtur në objektin anim, arrin koha për ta vizualizuar atë duke përdorur funksionin animate (). Renderer-i që përdoret në animate () mund të jetë i ndryshëm në varësi të llojit të skedarit të daljes 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 )

Rezultati

Krijimi i histogramave të animuara me ndihmën e R

Siç e shohim, nuk është asgjë e komplikuar. I gjithë projekti është i disponueshëm në GitHub-in tim, mund ta përdorni ashtu siç e shihni të arsyeshme.

Skillbox rekomandon:

Burimi: habr.com

Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS 🔥 Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS | ProHoster