ایجاد هیستوگرام متحرک با استفاده از R

ایجاد هیستوگرام متحرک با استفاده از R

نمودارهای میله ای متحرکی که می توانند مستقیماً در یک پست در هر وب سایتی جاسازی شوند، به طور فزاینده ای محبوب می شوند. آنها پویایی تغییرات در هر ویژگی را در یک زمان معین نشان می دهند و این کار را به وضوح انجام می دهند. بیایید ببینیم که چگونه آنها را با استفاده از R و بسته های عمومی ایجاد کنیم.

Skillbox توصیه می کند: دوره عملی "توسعه دهنده پایتون از ابتدا".

یادآوری می کنیم: برای همه خوانندگان "Habr" - تخفیف 10 روبل هنگام ثبت نام در هر دوره Skillbox با استفاده از کد تبلیغاتی "Habr".

بسته های

ما به بسته هایی در R نیاز داریم:

این دو فوق العاده ضروری هستند. علاوه بر این، برای مدیریت داده‌ها، تمیز کردن آرایه و قالب‌بندی مطابق با آن، به مرتب، سرایدار و ترازو نیاز است.

اطلاعات

مجموعه داده اصلی که در این پروژه استفاده خواهیم کرد از وب سایت بانک جهانی دانلود شده است. آن ها اینجا هستند - داده های بانک جهانی. همان داده ها را، اگر به صورت آماده نیاز دارید، می توانید از آن دانلود کنید پوشه های پروژه.

این چه نوع اطلاعاتی است؟ نمونه شامل ارزش تولید ناخالص داخلی اکثر کشورها برای چندین سال (از 2000 تا 2017) است.

پردازش داده ها

ما از کد ارسال شده در زیر برای تهیه فرمت داده های مورد نیاز استفاده خواهیم کرد. نام ستون ها را پاک می کنیم، اعداد را به فرمت عددی تبدیل می کنیم و داده ها را با استفاده از تابع collect() تبدیل می کنیم. ما هر چیزی را که در 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.
  • هیستوگرام های استاتیک را با پارامترهای دلخواه با استفاده از gananimate متحرک کنید.

مرحله آخر این است که انیمیشن را با فرمت دلخواه شامل GIF یا MP4 رندر کنید.

در حال بارگیری کتابخانه ها

  • کتابخانه (Tidyverse)
  • کتابخانه (گانیمیت)

مدیریت اطلاعات

در این مرحله، باید داده ها را فیلتر کنید تا 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 توصیه می کند:

منبع: www.habr.com

اضافه کردن نظر