إنشاء رسوم بيانية متحركة باستخدام R

إنشاء رسوم بيانية متحركة باستخدام R

أصبحت المخططات الشريطية المتحركة التي يمكن تضمينها مباشرةً في منشور على أي موقع ويب شائعة بشكل متزايد. يعرضون ديناميكيات التغييرات في أي خصائص خلال فترة زمنية معينة ويفعلون ذلك بوضوح. دعونا نرى كيفية إنشائها باستخدام R والحزم العامة.

يوصي Skillbox بما يلي: دورة عملية "مطور Python من البداية".

نذكر: لجميع قراء "Habr" - خصم 10 روبل عند التسجيل في أي دورة Skillbox باستخدام رمز "Habr" الترويجي.

حزم

نحتاج إلى حزم في R:

وهذان أمران ضروريان للغاية. بالإضافة إلى ذلك، ستكون هناك حاجة إلى نظام Tidyverse وبواب وميزان لإدارة البيانات وتنظيف المصفوفة والتنسيق وفقًا لذلك.

معطيات

يتم تنزيل مجموعة البيانات الأصلية التي سنستخدمها في هذا المشروع من موقع البنك الدولي. ها هم - بيانات البنك الدولي. ويمكن تنزيل نفس البيانات، إذا كنت في حاجة إليها جاهزة، من مجلدات المشروع.

أي نوع من المعلومات هذا؟ تحتوي العينة على قيمة الناتج المحلي الإجمالي لمعظم البلدان لعدة سنوات (من عام 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)
  • مكتبة (جانميت)

إدارة البيانات

في هذه الخطوة، تحتاج إلى تصفية البيانات للحصول على أفضل 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

كما ترون، لا شيء معقد. المشروع كاملا متوفر في بلدي جيثب، يمكنك استخدامه كما تراه مناسبًا.

يوصي Skillbox بما يلي:

المصدر: www.habr.com

إضافة تعليق