R колдонуу менен анимацияланган гистограммаларды түзүңүз

R колдонуу менен анимацияланган гистограммаларды түзүңүз

Каалаган веб-сайттагы постко түз кыстарыла турган анимацияланган тилке диаграммалары барган сайын популярдуу болуп баратат. Алар белгилүү бир убакыттын ичинде кандайдыр бир мүнөздөмөлөрдүн өзгөрүү динамикасын көрсөтүп, муну так аткарышат. Келгиле, аларды R жана жалпы пакеттерди колдонуу менен кантип түзүүнү карап көрөлү.

Skillbox сунуштайт: Практикалык курс "Нөлдөн баштап Python иштеп чыгуучусу".

Биз эсиңизге салабыз: "Хабрдын" бардык окурмандары үчүн - "Habr" промо-кодун колдонуу менен каалаган Skillbox курсуна катталганда 10 000 рубль арзандатуу.

Топтомдор

Бизге R тилиндеги пакеттер керек:

Бул экөө өтө зарыл. Мындан тышкары, маалыматтарды башкаруу, массивди тазалоо жана ошого жараша форматтоо үчүн тыкан, дворник жана тараза талап кылынат.

маалымат

Бул долбоордо биз колдоно турган баштапкы маалымат топтому Дүйнөлүк Банктын веб-сайтынан жүктөлүп алынган. Мына алар - Дүйнөлүк банктын маалыматтары. Ошол эле маалыматтарды, эгерде сизге даяр керек болсо, жүктөп алууга болот долбоор папкалары.

Бул кандай маалымат? Тандоодо көпчүлүк өлкөлөрдүн ИДПсынын бир нече жылдардагы (2000-жылдан 2017-жылга чейин) мааниси камтылган.

Маалыматтарды иштеп чыгуу

Биз талап кылынган маалымат форматын даярдоо үчүн төмөндө жарыяланган кодду колдонобуз. Биз мамычалардын аттарын тазалап, сандарды сан форматына айландырабыз жана чогултуу() функциясын колдонуу менен маалыматтарды конвертиребиз. Биз gdp_tidy.csv ичинде алынган нерселердин баарын андан ары колдонуу үчүн сактайбыз.

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

Анимацияланган гистограммалар

Аларды түзүү эки этапты талап кылат:

  • ggplot2 аркылуу чыныгы гистограммалардын толук топтомун түзүү.
  • gganimate аркылуу каалаган параметрлери менен статикалык гистограммаларды жандандырыңыз.

Акыркы кадам анимацияны керектүү форматта, анын ичинде GIF же MP4 форматында көрсөтүү болуп саналат.

Китепканалар жүктөлүүдө

  • китепкана(тыкан)
  • китепкана(gganimate)

Маалыматтарды башкаруу

Бул кадамда ар бир жыл үчүн эң мыкты 10 өлкөнү алуу үчүн маалыматтарды чыпкалоо керек. Келгиле, гистограмма үчүн легенданы көрсөтүүгө мүмкүндүк берген бир нече тилкелерди кошолу.

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

Статикалык гистограммаларды түзүү

Эми бизде керектүү форматтагы маалымат пакети бар, биз статикалык гистограммаларды тарта баштайбыз. Негизги маалымат - тандалган убакыт аралыгы үчүн максималдуу ИДПсы бар алдыңкы 10 өлкө. Ар бир жыл үчүн графиктерди түзөбүз.

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

ggplot2 аркылуу сюжеттерди түзүү абдан жөнөкөй. Жогорудагы код бөлүмүндө көрүп тургандай, theme() функциясынын бир нече негизги пункттары бар. Алар бардык элементтер көйгөйсүз жандуу болушу үчүн зарыл. Керек болсо алардын айрымдары көрсөтүлбөй калышы мүмкүн. Мисал: Тик торчо сызыктар жана легендалар гана тартылат, бирок октун аталыштары жана башка бир нече компоненттер аймактан алынып салынат.

жандуулук

Бул жерде негизги функция transition_states(), ал өзүнчө статикалык графиктерди бириктирет. view_follow() тор сызыктарын тартуу үчүн колдонулат.

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

Көрсөтүү

Анимация түзүлүп, аним объектинде сакталгандан кийин, аны animate() функциясынын жардамы менен көрсөтүүгө убакыт келди. animate()де колдонулган рендерер талап кылынган чыгаруу файлынын түрүнө жараша ар кандай болушу мүмкүн.

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 )

жыйынтык

R колдонуу менен анимацияланган гистограммаларды түзүңүз

Көрүнүп тургандай, татаал эч нерсе жок. Бардык долбоор жеткиликтүү менин GitHub, сиз каалагандай колдоно аласыз.

Skillbox сунуштайт:

Source: www.habr.com

Комментарий кошуу