Аливаа вэбсайт дээрх нийтлэлд шууд оруулах боломжтой хөдөлгөөнт баганан графикууд улам бүр түгээмэл болж байна. Тэд тодорхой хугацааны туршид аливаа шинж чанарын өөрчлөлтийн динамикийг харуулдаг бөгөөд үүнийг тодорхой хийдэг. R болон ерөнхий багцуудыг ашиглан тэдгээрийг хэрхэн үүсгэхийг харцгаая.
Skillbox зөвлөж байна: Практик курс
"Эхнээс нь Python хөгжүүлэгч" .Бид танд сануулж байна: "Хабр" -ын бүх уншигчдад - "Habr" сурталчилгааны кодыг ашиглан Skillbox-ын аль ч курст бүртгүүлэхдээ 10 рублийн хөнгөлөлт.
Багцууд
Бидэнд R-д багц хэрэгтэй:
- ggplot2
-
гайхалтай
Энэ хоёр маш хэрэгтэй. Нэмж дурдахад, өгөгдлийг удирдах, массивыг цэвэрлэж, форматлахын тулд эмх цэгцтэй, цэвэрлэгч, жинлүүр шаардлагатай болно.
мэдээ
Энэхүү төсөлд бидний ашиглах анхны мэдээллийн багцыг Дэлхийн банкны вэбсайтаас татаж авсан болно. Тэд энд байна -
Энэ ямар мэдээлэл вэ? Түүвэрт ихэнх улс орны хэдэн жилийн (2000-2017 он) ДНБ-ий үнэ цэнийг оруулсан болно.
Өгөгдөл боловсруулах
Бид шаардлагатай өгөгдлийн форматыг бэлтгэхийн тулд доор байрлуулсан кодыг ашиглана. Бид баганын нэрийг цэвэрлэж, тоонуудыг тооны формат болгон хувиргаж, gather() функцийг ашиглан өгөгдлийг хөрвүүлдэг. Бид 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 )
үр дүн
Таны харж байгаагаар ямар ч төвөгтэй зүйл байхгүй. Төслийг бүхэлд нь эндээс авах боломжтой
Skillbox зөвлөж байна:
- Хоёр жилийн практик сургалт
"Би PRO вэб хөгжүүлэгч" .- Онлайн курс
"Эхнээс нь C# хөгжүүлэгч" .- Практик жилийн курс
"0-ээс PRO хүртэл PHP хөгжүүлэгч" .
Эх сурвалж: www.habr.com