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



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

توصي Skillbox بما يلي: The Python Developer من البداية إلى نقطة الصفر .

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

حزم


نحتاج حزم في R:


هذان ضروريان. بالإضافة إلى ذلك ، فإن tyyverse و janitor والمقاييس مطلوبة لإدارة البيانات ومسح الصفيف والتنسيق ، على التوالي.

معطيات


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

ما هي هذه المعلومات؟ تحتوي العينة على الناتج المحلي الإجمالي لمعظم البلدان على مدار عدة سنوات (من 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.
  • موحية الرسوم البيانية ثابتة مع المعلمات المطلوبة باستخدام gganimate.

الخطوة الأخيرة هي تقديم الرسوم المتحركة بالتنسيق المطلوب ، بما في ذلك GIF أو MP4.

تحميل المكتبات


  • مكتبة (مرتب)
  • مكتبة (gannimate)

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


في هذه الخطوة ، تحتاج إلى تصفية البيانات للحصول على أفضل 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 بسيط للغاية. كما ترون في قسم الكود أعلاه ، هناك بعض النقاط الأساسية مع وظيفة السمة (). إنها ضرورية بحيث يتم تحريك جميع العناصر دون مشاكل. قد لا يتم عرض بعضها إذا لزم الأمر. مثال: يتم رسم خطوط الشبكة والأساطير العمودية فقط ، ولكن تتم إزالة عناوين المحاور وبعض المكونات الإضافية من الموقع.

حيوية


وتتمثل المهمة الرئيسية هنا في transfer_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") 

أداء


بعد إنشاء الرسوم المتحركة وحفظها في كائن الرسوم المتحركة ، حان الوقت لتصورها باستخدام وظيفة التحريك (). قد يختلف العارض المستخدم في التحريك () حسب نوع ملف الإخراج المطلوب.

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 ) 

يؤدي




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

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

Source: https://habr.com/ru/post/ar446952/


All Articles