Ստեղծեք անիմացիոն հիստոգրամներ՝ օգտագործելով R

Ստեղծեք անիմացիոն հիստոգրամներ՝ օգտագործելով R

Անիմացիոն գծապատկերները, որոնք կարող են ուղղակիորեն տեղադրվել ցանկացած կայքի գրառման մեջ, գնալով ավելի տարածված են դառնում: Նրանք ցուցադրում են որոշակի ժամանակի ընթացքում ցանկացած բնութագրերի փոփոխությունների դինամիկան և դա անում են հստակ: Տեսնենք, թե ինչպես կարելի է դրանք ստեղծել՝ օգտագործելով R և ընդհանուր փաթեթները:

Skillbox-ը խորհուրդ է տալիս. Գործնական դասընթաց «Python-ի մշակողը զրոյից».

Հիշեցում. «Habr»-ի բոլոր ընթերցողների համար՝ 10 ռուբլի զեղչ «Habr» գովազդային կոդով Skillbox-ի ցանկացած դասընթացին գրանցվելիս:

Փաթեթներ

Մեզ անհրաժեշտ են փաթեթներ 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:

Գրադարանների բեռնում

  • գրադարան (tidyverse)
  • գրադարան (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")

Մատուցում

Երբ անիմացիան ստեղծվի և պահվի anim օբյեկտում, ժամանակն է այն վերածել 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

Добавить комментарий