boxplot() في R: كيفية إنشاء Boxالرسومات في RStudio
⚡ ملخص ذكي
Boxيلخص الرسم البياني في لغة R التوزيع العددي من خلال وسيطه، وربيعاته، وخطوطه، وقيمه الشاذة باستخدام دالة geom_boxplot() من مكتبة ggplot2. يشرح هذا الدليل كيفية إنشاء مخطط صندوقي على مجموعة بيانات جودة الهواء، مع إضافة طبقات من الألوان، والنقاط، والتشويش، والشقوق، ومقارنات المجموعات.
boxplot() في R
boxplot() في R يساعد على تصور توزيع البيانات حسب الربع واكتشاف وجود القيم المتطرفة. يمكنك استخدام الكائن الهندسي geom_boxplot() من مكتبة ggplot2 لرسم boxplot() في R.
سنستخدم مجموعة بيانات جودة الهواء لتقديم دالة boxplot() في لغة R باستخدام مكتبة ggplot. تسجل مجموعة البيانات قياسات جودة الهواء اليومية في نيويورك من مايو إلى سبتمبر 1973، وتحتوي على 153 مشاهدة. سنستخدم المتغيرات التالية:
- الأوزون: متغير عددي
- الرياح: متغير عددي
- الشهر: من مايو إلى سبتمبر. متغير عددي
قبل رسم أي منها، يجدر معرفة ما يمثله كل جزء من أجزاء المربع بالضبط.
كيفية قراءة Box الرسم البياني: الربيعات، المدى الربيعي، والقيم المتطرفة
يمثل كل عنصر من عناصر مخطط الصندوق رقماً واحداً من ملخص الأرقام الخمسة. معرفة أيها يمثل أي رقم يحول المخطط من مجرد عنصر تزييني إلى أداة تحليلية.
- المفصلة السفلية: الربع الأول، Q1. خمسة وعشرون بالمائة من الملاحظات تقع أسفله.
- خط المنتصف: الربع الثاني. يكشف موقعه داخل المربع عن الانحراف: الخط الممتد نحو الأسفل يعني أن البيانات منحرفة نحو اليمين.
- المفصلة العلوية: الربع الثالث، Q3. خمسة وسبعون بالمائة من الملاحظات تقع أسفله.
- Box ارتفاع: المدى الربيعي، IQR = Q3 – Q1، الذي يحتوي على النصف الأوسط من البيانات وهو المقياس القياسي القوي للانتشار.
- شعر اللحية: وهي تمتد إلى أقصى حد للملاحظة، مع بقائها ضمن نطاق 1.5 ضعف المدى الربيعي لأقرب نقطة ارتكاز. وهي ليست الحد الأدنى والحد الأقصى.
- نقاط تتجاوز الشعيرات: الملاحظات المصنفة على أنها قيم متطرفة وفقًا لقاعدة 1.5 IQR.
تنبيهان. أولًا، تُعدّ "القيمة الشاذة" هنا مؤشرًا إحصائيًا، وليست خطأً: ففي التوزيعات الملتوية، مثل تركيز الأوزون، من المتوقع وجود قيم عالية، ولا ينبغي حذفها. ثانيًا، يُخفي مخطط الصندوق شكل التوزيع، لذا قد تحتوي مجموعتان لهما صناديق متطابقة على بيانات أساسية مختلفة تمامًا. ويُمكن تجنب ذلك بإضافة نقاط متفاوتة، كما هو موضح أدناه.
Box الرسم البياني مقابل المدرج التكراري مقابل الرسم البياني الكماني في لغة R
تصف جميع المخططات الثلاثة توزيعًا عدديًا، لكن كل منها يكشف شيئًا يخفيه الآخر.
| المعايير | Box قطعة | الرسم البياني | مؤامرة الكمان |
|---|---|---|---|
| يظهر | الوسيط، والربيعات، والقيم المتطرفة | التكرار في كل فئة | منحنى الكثافة الكاملة |
| Revيُقدم عروضًا على قمم متعددة | لا | نعم | نعم |
| الأعلام الشاذة | نعم، بشكل صريح | بصريًا فقط | لا مباشرة |
| مقارنة العديد من المجموعات | أسعار | غير ملائم | الخير |
| يحتاج إلى خيار ضبط | لا | نعم، عدد الصناديق | نعم، عرض النطاق الترددي |
| كائن ggplot2 | geom_boxplot() | geom_histogram() | geom_violin() |
يتمثل أحد الحلول الشائعة في رسم مخطط الكمان مع مخطط الصندوق الضيق بداخله، مما يحافظ على شكل الكثافة وملخص الأرباع في مخطط واحد. انظر شرح استخدام المدرج التكراري بالنسبة لجانب التصنيف في المقارنة.
إنشاء Box قطعة
قبل أن تبدأ في إنشاء boxplot() الأول في R، تحتاج إلى معالجة البيانات على النحو التالي:
- الخطوة 1: استيراد البيانات
- الخطوة 2: إسقاط المتغيرات غير الضرورية
- الخطوة 3: تحويل الشهر إلى عامل مرتب
- الخطوة الرابعة: إنشاء متغير تصنيفي جديد يقسم كل شهر إلى ثلاثة أجزاء: البداية، والمنتصف، والنهاية
- الخطوة 5: إزالة الملاحظات المفقودة
يتم تنفيذ كل هذه الخطوات باستخدام dplyr ومشغل خط الأنابيب %>%.
library(dplyr) library(ggplot2) # Step 1 data_air <- airquality %>% #Step 2 select(-c(Solar.R, Temp)) %>% #Step 3 mutate(Month = factor(Month, order = TRUE, labels = c("May", "June", "July", "August", "September")), #Step 4 day_cat = factor(ifelse(Day < 10, "Begin", ifelse(Day < 20, "Middle", "End"))))
من الممارسات الجيدة التحقق من بنية البيانات باستخدام الدالة glimpse().
glimpse(data_air)
الإخراج:
## Observations: 153 ## Variables: 5 ## $ Ozone <int> 41, 36, 12, 18, NA, 28, 23, 19, 8, NA, 7, 16, 11, 14, ... ## $ Wind <dbl> 7.4, 8.0, 12.6, 11.5, 14.3, 14.9, 8.6, 13.8, 20.1, 8.6... ## $ Month <ord> May, May, May, May, May, May, May, May, May, May, May,... ## $ Day <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,... ## $ day_cat <fctr> Begin, Begin, Begin, Begin, Begin, Begin, Begin, Begi...
يحتوي كل من Ozone و Solar.R على قيم غير متاحة (NA). ولأن دالة geom_boxplot() ستتجاهلها تلقائيًا وتطبع تحذيرًا، فمن الأفضل إزالتها صراحةً.
# Step 5
data_air_nona <-data_air %>% na.omit()
رسم بياني أساسي للصندوق
ارسم الآن توزيع الأوزون حسب الشهر.
# Store the graph box_plot <- ggplot(data_air_nona, aes(x = Month, y = Ozone)) # Add the geometric object box plot box_plot + geom_boxplot()
Code تفسير
- تخزين الرسم البياني لمزيد من الاستخدام
- box_plot: يتم تخزين الرسم البياني الأساسي في الكائن box_plot، مما يسمح لك بإضافة طبقات لاحقًا دون تكرار الاستدعاء بالكامل
- أضف الشكل الهندسي
- تقوم بتمرير مجموعة البيانات data_air_nona إلى ggplot boxplot.
- داخل الوسيطة aes()، يمكنك إضافة المحور السيني والمحور الصادي.
- تعني علامة + أنك تريد من R الاستمرار في قراءة الكود. وهذا يجعل الكود أكثر قابلية للقراءة عن طريق كسره.
- استخدم geom_boxplot() لإنشاء رسم بياني للصندوق
الإخراج:
تغيير جانب الرسم البياني
يمكنك قلب جانب الرسم البياني.
box_plot +
geom_boxplot()+
coord_flip()
Code تفسير
- box_plot: يمكنك استخدام الرسم البياني الذي قمت بتخزينه. وهو يتجنب إعادة كتابة جميع الأكواد في كل مرة تقوم فيها بإضافة معلومات جديدة إلى الرسم البياني.
- geom_boxplot(): ارسم الصناديق والخطوط المتوازية
- coord_flip(): اقلب جانب الرسم البياني
الإخراج:
تغيير لون الخارجة
يمكنك تغيير لون وشكل وحجم القيم المتطرفة.
box_plot +
geom_boxplot(outlier.colour = "red",
outlier.shape = 2,
outlier.size = 3) +
theme_classic()
Code تفسير
- outlier.colour=”red”: التحكم في لون القيم المتطرفة
- outlier.shape=2: تغيير شكل القيمة الخارجية. 2 يشير إلى المثلث
- outlier.size=3: غيّر حجم المثلث. الأرقام الأكبر ترسم علامات أكبر.
الإخراج:
إضافة إحصائية موجزة
يمكنك إضافة إحصائية موجزة مثل متوسط المجموعة، والتي لا يظهرها مخطط الصندوق نفسه.
box_plot +
geom_boxplot() +
stat_summary(fun.y = mean,
geom = "point",
size = 3,
color = "steelblue") +
theme_classic()
Code تفسير
- تضيف الدالة stat_summary() إحصائية محسوبة أعلى مخطط الصندوق
- يتحكم الوسيط fun في الإحصائية التي يتم إرجاعها. هنا، هو المتوسط. لاحظ أن الكود القديم كان يستخدم fun.y، والذي تم إيقافه في الإصدار 3.3.0 من ggplot2.
- ملاحظة: تتوفر إحصائيات أخرى مثل الحد الأدنى والحد الأقصى. يمكن عرض أكثر من إحصائية في نفس الرسم البياني
- Geom = "نقطة": ارسم المتوسط بنقطة
- size=3: حجم النقطة
- اللون =”steelblue”: لون النقاط
الإخراج:
Box مؤامرة مع النقاط
بعد ذلك، أضف طبقة رسم بياني نقطي فوق المربعات. تمثل كل نقطة مشاهدة واحدة، مما يجعل حجم العينة خلف كل مربع مرئيًا.
box_plot +
geom_boxplot() +
geom_dotplot(binaxis = 'y',
dotsize = 1,
stackdir = 'center') +
theme_classic()
Code تفسير
- تقوم الدالة geom_dotplot() برسم نقطة واحدة لكل ملاحظة، مكدسة داخل كل خانة.
- binaxis='y': قم بتغيير موضع النقاط على طول المحور y. بشكل افتراضي، المحور س
- dotsize=1: حجم النقاط
- stackdir='center': طريقة تكديس النقاط: أربع قيم:
- "أعلى" (افتراضي)،
- "تحت"
- "مركز"
- "الكل المركزي"
الإخراج:
التحكم الجمالي لل Box قطعة
تغيير لون الصندوق
يمكنك تغيير ألوان المجموعة.
ggplot(data_air_nona, aes(x = Month, y = Ozone, color = Month)) + geom_boxplot() + theme_classic()
Code تفسير
- يتم التحكم في ألوان المجموعات في خريطة aes()pingيمكنك استخدام اللون = الشهر لتغيير لون مخطط الصندوق والشعيرات وفقًا للأشهر
الإخراج:
Box مؤامرة مع مجموعات متعددة
من الممكن أيضًا إضافة مجموعات متعددة. يمكنك تصور الفرق في جودة الهواء وفقًا ليوم القياس.
ggplot(data_air_nona, aes(Month, Ozone)) + geom_boxplot(aes(fill = day_cat)) + theme_classic()
Code تفسير
- خريطة aes()ping يتحكم الكائن الهندسي في المجموعات المراد عرضها (يجب أن يكون هذا المتغير عاملاً).
- aes(fill= day_cat) يسمح بإنشاء ثلاثة مربعات لكل شهر في المحور x
الإخراج:
Box مؤامرة مع النقاط المتوترة
هناك طريقة أخرى لعرض الملاحظات الفردية وهي استخدام النقاط المتذبذبة. يُعد التذبذب الخيار المعتاد عندما يتسبب محور السينات الفئوي في وقوع العديد من النقاط في نفس الموضع.
تتجنب هذه الطريقة التداخلping من البيانات المنفصلة.
box_plot +
geom_boxplot() +
geom_jitter(shape = 15,
color = "steelblue",
position = position_jitter(width = 0.21)) +
theme_classic()
Code تفسير
- تُضيف الدالة geom_jitter() إزاحة عشوائية صغيرة إلى كل نقطة لتجنب التداخلping تصبح القيم مرئية.
- الشكل=15 يغير شكل النقاط. 15 يمثل المربعات
- اللون = "steelblue": تغيير لون النقطة
- position = position_jitter(width = 0.21): يتحكم في مدى إزاحة النقاط جانبيًا، مقاسة بوحدات المحور السيني. القيمة الافتراضية هي 40% من المسافة بين الفئات.
الإخراج:
يمكنك رؤية الفرق بين الرسم البياني الأول بطريقة الارتعاش والثاني بطريقة النقطة.
box_plot +
geom_boxplot() +
geom_point(shape = 5,
color = "steelblue") +
theme_classic()
حقق Box قطعة
من الميزات المثيرة للاهتمام في geom_boxplot() هي دالة رسم الصندوق المسنن في R. يضيق رسم الصندوق المسنن المربع حول الوسيط. الغرض الرئيسي من رسم الصندوق المسنن هو مقارنة أهمية الوسيط بين المجموعات. هناك أدلة قوية على أن المجموعتين لهما وسيطان مختلفان عندما لا تتداخل الشقوق. يتم حساب الشق على النحو التالي:
هنا، يُمثل IQR المدى الربيعي، و n عدد المشاهدات في المجموعة. ويغطي الشق تقريبًا فترة الثقة بنسبة 95% للوسيط.
box_plot +
geom_boxplot(notch = TRUE) +
theme_classic()
Code تفسير
- geom_boxplot(notch = TRUE): ارسم مخطط الصندوق مع وجود فجوات حول الوسيط
الإخراج:
كيفية إضافة العناوين والملصقات والألوان المخصصة إلى Box رسم بياني في R
تستخدم الرسوم البيانية أعلاه الإعدادات الافتراضية لـ ggplot2، والتي تستمد أسماء المتغيرات مباشرةً من إطار البيانات. يحتاج الرسم البياني القابل للنشر إلى تسميات واضحة ولوحة ألوان مدروسة.
العناوين وتسميات المحاور. استدعاء واحد للدالة labs() يقوم بتعيين كل عنصر نصي:
box_plot +
geom_boxplot(fill = "coral", alpha = 0.7) +
labs(title = "Ozone concentration by month",
subtitle = "New York, May to September 1973",
x = "Month",
y = "Ozone (parts per billion)",
caption = "Source: airquality dataset") +
theme_classic()
اختيار ألوانك الخاصة. استخدم scale_fill_manual() عندما يتم تعيين التعبئة داخل aes()، واستخدم scale_colour_manual() عندما يكون اللون:
ggplot(data_air_nona, aes(x = Month, y = Ozone, fill = Month)) + geom_boxplot() + scale_fill_manual(values = c("#0e9cd1", "coral", "#7dc27d", "#c9a227", "grey60")) + theme_classic() + theme(legend.position = "none")
تم إيقاف تشغيل مفتاح الرسم البياني هنا لأن المحور السيني يسمي بالفعل كل شهر، لذا فإن تكراره سيؤدي إلى إهدار المساحة.
إعادة ترتيب الصناديق. تُحدد مستويات العامل ترتيب البيانات على المحور. ولأن الشهر أُنشئ كعامل مُرتب، فإنه يُقرأ تلقائيًا بترتيب زمني. أما بالنسبة للعامل غير المُرتب، فيُفضل فرز البيانات حسب الوسيط.
ggplot(data_air_nona, aes(x = reorder(Month, Ozone, FUN = median), y = Ozone)) + geom_boxplot() + theme_classic()
حفظ المخطط. تقوم الدالة ggsave() بكتابة الرسم البياني الأخير على القرص بدقة تتحكم بها:
ggsave("ozone_boxplot.png", width = 8, height = 5, dpi = 300)
Box رسم بياني في لغة R: Code الرقم المرجعي
يسرد الجدول أدناه استدعاء ggplot2 لكل نوع من أنواع مخطط الصندوق المذكورة أعلاه:
| الهدف | Code |
|---|---|
| رسم بياني أساسي للصندوق |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() |
| اعكس الاتجاه |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + coord_flip() |
| رسم تخطيطي لصندوق مسنن |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(notch = TRUE) |
| Box مؤامرة مع النقاط المتوترة |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + geom_jitter(position = position_jitter(0.21)) |
| التلوين حسب المجموعة |
ggplot(df, aes(x = x1, y = y, color = x1)) + geom_boxplot() |
| مجموعات متعددة لكل فئة |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot(aes(fill = x2)) |
| أضف متوسط المجموعة |
ggplot(df, aes(x = x1, y = y)) + geom_boxplot() + stat_summary(fun = mean, geom = "point") |
تحقق أيضا: - دروس R للمبتدئين: تعلم لغة برمجة R












