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 ұсынады:

Ақпарат көзі: www.habr.com

пікір қалдыру