مخطط التشتت في R باستخدام ggplot2 (مع مثال)
الرسوم البيانية هي الجزء الثالث من عملية تحليل البيانات. الجزء الأول عباره عن بيانات مثالtracالإنتاج، ويتناول الجزء الثاني تنظيف ومعالجة البيانات. أخيرًا، قد يحتاج عالم البيانات إلى ذلك توصيل نتائجه بيانيا.
يمكن مراجعة وظيفة عالم البيانات في الصورة التالية
- المهمة الأولى لعالم البيانات هي تحديد سؤال البحث. يعتمد هذا السؤال البحثي على أهداف وغايات المشروع.
- بعد ذلك، من أبرز المهام هي هندسة الميزات. يحتاج عالم البيانات إلى جمع البيانات ومعالجتها وتنظيفها
- عند اكتمال هذه الخطوة، يمكنه البدء في استكشاف مجموعة البيانات. في بعض الأحيان، يكون من الضروري تحسين وتغيير الفرضية الأصلية بسبب اكتشاف جديد.
- عندما تفسيري بعد تحقيق التحليل، يجب على عالم البيانات أن يأخذ في الاعتبار قدرة القارئ على ذلك فهم المفاهيم والنماذج الأساسية.
- وينبغي تقديم نتائجه في شكل يمكن لجميع أصحاب المصلحة فهمه. واحدة من أفضل الطرق ل التواصل النتائج من خلال أ رسم بياني.
- تُعد الرسوم البيانية أداة رائعة لتبسيط التحليلات المعقدة.
حزمة ggplot2
يركز هذا الجزء من البرنامج التعليمي على كيفية عمل الرسوم البيانية/المخططات باستخدام R.
في هذا الدرس، ستستخدم حزمة ggplot2. هذه الحزمة مبنية على الأساس المتين لكتاب "قواعد الرسومات" (Grammar of graphics) للمؤلف ويلكنسون، الصادر عام 2005. تتميز ggplot2 بمرونة عالية، وتتضمن العديد من السمات وخيارات تحديد الرسوم البيانية بمستوى عالٍ من الدقة.tracباستخدام ggplot2، لا يمكنك رسم رسومات ثلاثية الأبعاد وإنشاء رسومات تفاعلية.
في ggplot2، يتكون الرسم البياني من الوسائط التالية:
- البيانات
- خريطة جماليةping
- كائن هندسي
- التحولات الإحصائية
- النطاقات
- نظام الإحداثيات
- تعديلات الموقف
- الوجه
سوف تتعلم كيفية التحكم في تلك الوسائط في البرنامج التعليمي.
بناء الجملة الأساسي لـ ggplot2 هو:
ggplot(data, mapping=aes()) + geometric object arguments: data: Dataset used to plot the graph mapping: Control the x and y-axis geometric object: The type of plot you want to show. The most common object are: - Point: `geom_point()` - Bar: `geom_bar()` - Line: `geom_line()` - Histogram: `geom_histogram()`
مبعثر
دعونا نرى كيف يعمل ggplot مع مجموعة بيانات mtcars. عليك أن تبدأ برسم مخطط مبعثر لمتغير mpg ومتغير drat.
مؤامرة مبعثر الأساسية
library(ggplot2)
ggplot(mtcars, aes(x = drat, y = mpg)) +
geom_point()
Code تفسير
- عليك أولاً تمرير مجموعة البيانات mtcars إلى ggplot.
- داخل الوسيطة aes()، يمكنك إضافة المحور السيني والمحور الصادي.
- تعني علامة + أنك تريد من R الاستمرار في قراءة الكود. وهذا يجعل الكود أكثر قابلية للقراءة عن طريق كسره.
- استخدم Geom_point() للكائن الهندسي.
الإخراج:
مؤامرة مبعثرة مع المجموعات
في بعض الأحيان، قد يكون من المثير للاهتمام التمييز بين القيم من خلال مجموعة من البيانات (أي بيانات مستوى العامل).
ggplot(mtcars, aes(x = mpg, y = drat)) +
geom_point(aes(color = factor(gear)))
Code تفسير
- يتحكم aes() داخل Geom_point() في لون المجموعة. يجب أن تكون المجموعة عامل متغير. وبالتالي، يمكنك تحويل الترس المتغير إلى عامل.
- وإجمالاً، لديك الكود aes(color = Factor(gear)) الذي يغير لون النقاط.
الإخراج:
تغيير المحور
تعد إعادة قياس البيانات جزءًا كبيرًا من وظيفة عالم البيانات. وفي حالات نادرة، تأتي البيانات في شكل جرس جميل. أحد الحلول لجعل بياناتك أقل حساسية للقيم المتطرفة هو إعادة قياسها.
ggplot(mtcars, aes(x = log(mpg), y = log(drat))) +
geom_point(aes(color = factor(gear)))
Code تفسير
- تقوم بتحويل المتغيرين x و y في دالة log() مباشرةً داخل دالة aes() mapping.
لاحظ أنه يمكن تطبيق أي تحويل آخر مثل التوحيد القياسي أو التطبيع.
الإخراج:
مؤامرة مبعثرة مع القيم المجهزة
يمكنك إضافة مستوى آخر من المعلومات إلى الرسم البياني. يمكنك رسم القيمة المجهزة للانحدار الخطي.
my_graph <- ggplot(mtcars, aes(x = log(mpg), y = log(drat))) +
geom_point(aes(color = factor(gear))) +
stat_smooth(method = "lm",
col = "#C42126",
se = FALSE,
size = 1)
my_graph
Code تفسير
- الرسم البياني: يمكنك تخزين الرسم البياني الخاص بك في الرسم البياني المتغير. وهو مفيد للاستخدام الإضافي أو لتجنب سطور التعليمات البرمجية المعقدة للغاية
- تتحكم الوسيطة stat_smooth() في طريقة التجانس
- الطريقة = "lm": الانحدار الخطي
- col = “#C42126”: Code للون الأحمر للخط
- se = FALSE: لا تعرض الخطأ القياسي
- الحجم = 1: حجم الخط هو 1
الإخراج:
لاحظ أن طرق التجانس الأخرى متوفرة
- GLM
- حركة اتشيه الحرة
- الخسارة: القيمة الافتراضية
- حافة
إضافة معلومات إلى الرسم البياني
حتى الآن، لم نضف معلومات إلى الرسوم البيانية. يجب أن تكون الرسوم البيانية مفيدة. يجب أن يرى القارئ القصة وراء تحليل البيانات بمجرد النظر إلى الرسم البياني دون الرجوع إلى وثائق إضافية. وبالتالي، تحتاج الرسوم البيانية إلى تسميات جيدة. يمكنك إضافة تسميات باستخدام الدالة labs().
بناء الجملة الأساسي للمعامل () هو:
lab(title = "Hello Guru99") argument: - title: Control the title. It is possible to change or add title with: - subtitle: Add subtitle below title - caption: Add caption below the graph - x: rename x-axis - y: rename y-axis Example:lab(title = "Hello Guru99", subtitle = "My first plot")
إضافة عنوان
من الواضح أن إحدى المعلومات الإلزامية التي يجب إضافتها هي العنوان.
my_graph +
labs(
title = "Plot Mile per hours and drat, in log"
)
Code تفسير
- my_graph: يمكنك استخدام الرسم البياني الذي قمت بتخزينه. إنه يتجنب إعادة كتابة جميع الرموز في كل مرة تقوم فيها بإضافة معلومات جديدة إلى الرسم البياني.
- قمت بلف العنوان داخل المعمل ().
- Code للون الأحمر للخط
- se = FALSE: لا تعرض الخطأ القياسي
- الحجم = 1: حجم الخط هو 1
الإخراج:
أضف عنوانًا باسم ديناميكي
يعد العنوان الديناميكي مفيدًا لإضافة معلومات أكثر دقة في العنوان.
يمكنك استخدام وظيفة اللصق () لطباعة نص ثابت ونص ديناميكي. بناء الجملة الأساسي لـ Paste () هو:
paste("This is a text", A)
arguments
- " ": Text inside the quotation marks are the static text
- A: Display the variable stored in A
- Note you can add as much static text and variable as you want. You need to separate them with a comma
على سبيل المثال:
A <-2010
paste("The first year is", A)
الإخراج:
## [1] "The first year is 2010"
B <-2018
paste("The first year is", A, "and the last year is", B)
الإخراج:
## [1] "The first year is 2010 and the last year is 2018"
يمكنك إضافة اسم ديناميكي إلى الرسم البياني الخاص بنا، وهو متوسط ميلا في الغالون.
mean_mpg <- mean(mtcars$mpg)
my_graph + labs(
title = paste("Plot Mile per hours and drat, in log. Average mpg is", mean_mpg)
)
Code تفسير
- يمكنك إنشاء متوسط ميلا في الغالون مع متوسط (mtcars$mpg) المخزن في متغير Mean_mpg
- يمكنك استخدام اللصق () مع mean_mpg لإنشاء عنوان ديناميكي يُرجع القيمة المتوسطة لـ mpg
الإخراج:
أضف عنوانًا فرعيًا
اثنين من التفاصيل الإضافية يمكن أن تجعل الرسم البياني الخاص بك أكثر وضوحا. أنت تتحدث عن العنوان الفرعي والتسمية التوضيحية. العنوان الفرعي يذهب مباشرة أسفل العنوان. يمكن أن توضح التسمية التوضيحية من قام بالحساب ومصدر البيانات.
my_graph +
labs(
title =
"Relation between Mile per hours and drat",
subtitle =
"Relationship break down by gear class",
caption = "Authors own computation"
)
Code تفسير
- داخل المعمل () أضفت:
- العنوان = "العلاقة بين ميل في الساعة ودرات": أضف عنوانًا
- العنوان الفرعي = "تقسيم العلاقة حسب فئة الترس": أضف عنوانًا فرعيًا
- تسمية توضيحية = "الحسابات الخاصة بالمؤلفين: أضف تسمية توضيحية
- يمكنك فصل كل معلومات جديدة بفاصلة، ،
- لاحظ أنك قمت بكسر سطور التعليمات البرمجية. إنه ليس إلزاميًا، ويساعد فقط على قراءة الكود بسهولة أكبر
الإخراج:
إعادة تسمية المحور السيني والمحور الصادي
قد لا تكون المتغيرات نفسها في مجموعة البيانات واضحة دائمًا أو تستخدم _ وفقًا للاتفاقية عندما تكون هناك كلمات متعددة (على سبيل المثال GDP_CAP). لا تريد ظهور مثل هذا الاسم في الرسم البياني الخاص بك. من المهم تغيير الاسم أو إضافة المزيد من التفاصيل، مثل الوحدات.
my_graph +
labs(
x = "Drat definition",
y = "Mile per hours",
color = "Gear",
title = "Relation between Mile per hours and drat",
subtitle = "Relationship break down by gear class",
caption = "Authors own computation"
)
Code تفسير
- داخل المعمل () أضفت:
- x = "تعريف Drat": تغيير اسم المحور السيني
- y = “ميل في الساعة”: تغيير اسم المحور y
الإخراج:
السيطرة على المقاييس
يمكنك التحكم في حجم المحور.
تعتبر الدالة seq() ملائمة عندما تحتاج إلى إنشاء تسلسل رقمي. بناء الجملة الأساسي هو:
seq(begin, last, by = x) arguments: - begin: First number of the sequence - last: Last number of the sequence - by= x: The step. For instance, if x is 2, the code adds 2 to `begin-1` until it reaches `last`
على سبيل المثال، إذا كنت تريد إنشاء نطاق من 0 إلى 12 بخطوة 3، فسيكون لديك أربعة أرقام، 0 4 8 12
seq(0, 12,4)
الإخراج:
## [1] 0 4 8 12
يمكنك التحكم في مقياس المحور السيني والمحور الصادي كما هو موضح أدناه
my_graph +
scale_x_continuous(breaks = seq(1, 3.6, by = 0.2)) +
scale_y_continuous(breaks = seq(1, 1.6, by = 0.1)) +
labs(
x = "Drat definition",
y = "Mile per hours",
color = "Gear",
title = "Relation between Mile per hours and drat",
subtitle = "Relationship break down by gear class",
caption = "Authors own computation"
)
Code تفسير
- تتحكم الدالةscale_y_continious() في المحور الصادي
- تتحكم الدالةscale_x_continious() في المحور السيني.
- تتحكم فواصل المعلمة في تقسيم المحور. يمكنك إضافة تسلسل الأرقام يدويًا أو استخدام الدالة seq():
- seq(1, 3.6, by = 0.2): قم بإنشاء ستة أرقام من 2.4 إلى 3.4 بخطوة 3
- seq(1, 1.6, by = 0.1): قم بإنشاء سبعة أرقام من 1 إلى 1.6 بخطوة 1
الإخراج:
موضوع
أخيرًا، يسمح لنا R بتخصيص الحبكة بمواضيع مختلفة. تتضمن مكتبة ggplot2 ثمانية مواضيع:
- theme_bw()
- theme_light()
- theme_classis()
- theme_linedraw()
- theme_dark()
- theme_minimal()
- theme_gray()
- theme_void()
my_graph +
theme_dark() +
labs(
x = "Drat definition, in log",
y = "Mile per hours, in log",
color = "Gear",
title = "Relation between Mile per hours and drat",
subtitle = "Relationship break down by gear class",
caption = "Authors own computation"
)
الإخراج:
حفظ المؤامرات
بعد كل هذه الخطوات، حان الوقت لحفظ الرسم البياني الخاص بك ومشاركته. يمكنك إضافة ggsave('NAME OF THE FILE) مباشرة بعد رسم الرسم البياني وسيتم تخزينه على القرص الصلب.
يتم حفظ الرسم البياني في دليل العمل. للتحقق من دليل العمل، يمكنك تشغيل هذا الكود:
directory <-getwd() directory
دعونا نرسم الرسم البياني الرائع الخاص بك، ونحفظه ونتحقق من الموقع
my_graph +
theme_dark() +
labs(
x = "Drat definition, in log",
y = "Mile per hours, in log",
color = "Gear",
title = "Relation between Mile per hours and drat",
subtitle = "Relationship break down by gear class",
caption = "Authors own computation"
)
الإخراج:
ggsave("my_fantastic_plot.png")
الإخراج:
## Saving 5 x 4 in image
ملاحظات: للأغراض التعليمية فقط، أنشأنا وظيفة تسمى open_folder() لفتح مجلد الدليل لك. كل ما عليك فعله هو تشغيل الكود أدناه ومعرفة مكان تخزين الصورة. يجب أن تشاهد أسماء الملفات my_fantastic_plot.png.
# Run this code to create the
function
open_folder <- function(dir) {
if (.Platform['OS.type'] == "windows") {
shell.exec(dir)
} else {
system(paste(Sys.getenv("R_BROWSER"), dir))
}
}
# Call the
function to open the folder open_folder(directory)
ملخص
يمكنك تلخيص الحجج لإنشاء مخطط التشتت في الجدول أدناه:
| الهدف | Code |
|---|---|
| مؤامرة مبعثر الأساسية |
ggplot(df, aes(x = x1, y = y)) + geom_point() |
| مؤامرة مبعثرة مع مجموعة الألوان |
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) + stat_smooth(method = "lm") |
| إضافة القيم المجهزة |
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) |
| أضف العنوان |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(title = paste("Hello Guru99"))
|
| إضافة العنوان الفرعي |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(subtitle = paste("Hello Guru99"))
|
| إعادة تسمية س |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(x = "X1") |
| إعادة تسمية ذ |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(y = "y1") |
| التحكم في المقياس |
ggplot(df, aes(x = x1, y = y)) + geom_point() + scale_y_continuous(breaks = seq(10, 35, by = 10)) + scale_x_continuous(breaks = seq(2, 5, by = 1) |
| إنشاء سجلات |
ggplot(df, aes(x =log(x1), y = log(y))) + geom_point() |
| موضوع |
ggplot(df, aes(x = x1, y = y)) + geom_point() + theme_classic() |
| التوفير |
ggsave("my_fantastic_plot.png")
|












