البرمجة الإحصائيةتصور البيانات بلغة R

كيفية رسم وسيلة إيضاح خارج المخطط في R

دليل أكاديمي شامل يشرح كيفية رسم وتحديد موضع وسيلة الإيضاح (Legend) خارج نطاق المخطط البياني في لغة R باستخدام دالة par والمعلمات mar وxpd وinset.

تاريخ النشر

تُعد لغة البرمجة الإحصائية R إحدى أقوى البيئات البرمجية وأكثرها مرونة في مجال التحليل الاستكشافي للبيانات وإنتاج الرسوم البيانية العلمية المتقدمة. يتيح نظام الرسوم البيانية الأساسي (Base R Graphics Engine) للباحثين والمحللين إمكانية التحكم الدقيق في كل بكسل وعنصر هندسي يظهر على سطح الشكل، بدءاً من المحاور والنقاط ووصولاً إلى النصوص المفسرة ووسائل الإيضاح (Legends). ومع ذلك، فإن هذه المرونة المطلقة تقترن بنظام إحداثيات صارم وهندسة هوامش محددة قد تفرض قيوداً برمجية غير مألوفة، لعل أبرزها صعوبة وضع وسيلة الإيضاح خارج الإطار الحسابي لمنطقة الرسم دون اقتطاع أجزاء منها أو تشويه المظهر الجمالي للمخطط الإحصائي.

إن وضع وسيلة الإيضاح خارج منطقة الرسم (Outside the Plot Region) يمثل ضرورة منهجية وأكاديمية ملحة في العديد من السيناريوهات التحليلية؛ حيث يؤدي تكديس الرموز التفسيرية داخل مساحة البيانات إلى حجب المشاهدات الفعلية، وطمس الأنماط الرياضية، وتقليل كفاءة التمثيل البصري للمعلومات. يتطلب التغلب على هذا التحدي فهماً عميقاً لآليات التحكم في معلمات البيئة الرسومية، ولا سيما وظائف الدالة المعيارية par()، ومعلمة الهوامش mar، ومعلمة التحكم في القص الرسومي xpd، بالإضافة إلى الاستخدام الدقيق لمعلمات الإزاحة الموضعية داخل دالة legend() مثل inset و bty.

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

1. مقدمة شاملة حول أهمية تموضع وسيلة الإيضاح في الرسوم البيانية الإحصائية بلغة R

1.1 الدور الدلالي لوسيلة الإيضاح في التفسير البصري للبيانات

تمثل وسيلة الإيضاح (Legend) المفتاح الدلالي والفكري الذي يربط بين الخصائص البصرية المجردة داخل الرسم البياني—مثل الألوان، والأشكال الهندسية للنقاط، وأنماط الخطوط المتقطعة—وبين المتغيرات التجريبية أو الفئات الإحصائية التي تمثلها في العالم الحقيقي. عند التعامل مع مجموعات بيانات متعددة المتغيرات (Multivariate Datasets)، تصبح وسيلة الإيضاح ركيزة لا غنى عنها لتمكين القارئ من إجراء المقارنات الفورية بين المجموعات التجريبية ومجموعات الشواهد دون إجهاد إدراكي أو التباس بصري. إن غياب وسيلة الإيضاح أو غموض موضعها يحول المخطط البياني من وسيلة تواصل علمية فعالة إلى مجرد شكل هندسي معقد يفتقر إلى الدلالة التفسيرية.

في سياق النشر الأكاديمي والتحليل الإحصائي الرصين، تخضع الرسوم البيانية لمعايير صارمة تتعلق بالوضوح، والدقة، وقابلية التكرار. يتطلب التعبير عن مستويات الثقة، وخطوط الانحدار المتعددة، وفئات التصنيف تمايزاً دقيقاً في الألوان والرموز. إذا وُضعت وسيلة الإيضاح داخل الإطار الداخلي للرسم، فإنها غالباً ما تتداخل مع النقاط المتطرفة (Outliers) أو التكتلات البيانية الكثيفة، مما يؤدي إلى طمس البيانات الفعلية وإضعاف النزاهة البصرية للمخطط. لذلك، فإن إخراج وسيلة الإيضاح إلى الهوامش الخارجية يضمن الحفاظ على نقاء مساحة التمثيل الإحصائي ويوفر مساحة مستقلة لقراءة المفاتيح التفسيرية بوضوح تام.

تتفاقم مشاكل التداخل البصري عندما تحتوي وسيلة الإيضاح على نصوص طويلة، أو عناوين مركبة، أو عدد كبير من الفئات التجريبية. في مثل هذه الحالات، يجبر التموضع الداخلي الباحث على تقليص حجم الخط (Font Size) إلى مستويات غير مقروءة، أو تصغير مساحة الرموز، مما يخل بالمعايير الطباعية المعتمدة لدى دور النشر العلمية. ومن ثم، فإن إتقان تقنيات التموضع الخارجي يمنح المحلل مرونة مطلقة في تنسيق النصوص، وضبط المسافات البينية، وإضافة العناوين الفرعية دون المساس بالمساحة المخصصة لعرض التوزيعات الإحصائية ونقاط البيانات.

1.2 تحديات النظام الافتراضي للرسوم البيانية في Base R

يعتمد نظام Base R Graphics على بنية تصميمية كلاسيكية تفترض بشكل افتراضي أن جميع العناصر الرسومية المضافة—باستثناء تسميات المحاور والعناوين الرئيسية—يجب أن تُحصر بدقة داخل “منطقة الرسم” (Plotting Region) المحددة بنطاق إحداثيات المحورين السيني والصادي. عند استدعاء دالة legend() بالقيم الافتراضية، تقوم البيئة البرمجية بحساب موضع وسيلة الإيضاح بالاعتماد على القيم العددية للمحاور (User Coordinates) أو الكلمات المفتاحية المكانية مثل "topright"، وتلزمها بالبقاء داخل الإطار المستطيل المغلق للمخطط البياني.

ينشأ التحدي التقني الأساسي من مفهوم “القص البصري الافتراضي” (Default Clipping). في نظام R، يتم تفعيل جدار حماية رسومي غير مرئي يمنع محرك الرسم من رسم أي نقطة، أو خط، أو نص يتجاوز حدود منطقة الإحداثيات الفعلية، وذلك لتجنب تشويه هوامش الصفحة أو التداخل مع تسميات المحاور. نتيجة لذلك، إذا حاول المبرمج ببساطة تحديد إحداثيات تقع خارج نطاق المحاور أو استخدام نسب إزاحة سالبة لإخراج وسيلة الإيضاح، فإن محرك R سيقوم باقتطاع وسيلة الإيضاح كلياً أو جزئياً، بحيث تظهر فقط الأجزاء الواقعة داخل حدود الإطار، في حين يختفي الجزء الأكبر في الفراغ الخارجي غير المرئي.

علاوة على ذلك، فإن الهوامش الافتراضية للنافذة الرسومية (Device Margins) في R مصممة لتكون ضيقة نسبياً، ولا سيما الهامش الأيمن (Right Margin) الذي يُخصص له عادة مساحة تكفي فقط لعلامات التدريج الطفيفة. يعني ذلك أنه حتى في حال تعطيل القص البصري، فإن وسيلة الإيضاح الموضوعة خارج الإطار قد تتجاوز الحدود المادية لنافذة العرض أو الورقة المطبوعة، مما يؤدي إلى قطع النصوص وفقدان المعلومات التفسيرية. يتطلب حل هذه المعضلة تدخلاً برمجياً مباشراً لإعادة هندسة الهوامش وتعديل سلوك محرك الرسوميات.

Legend outside of a plot in base R
Legend outside of a plot in base R

1.3 أهداف المقال وهيكلية الحل البرمجي المقترح

يهدف هذا المقال إلى تقديم دليل عملي ونظري شامل يفكك القيود الهندسية لنظام Base R Graphics، ويمكن القارئ من وضع وسائل الإيضاح في أي موقع جغرافي يختاره حول المخطط البياني بدقة واحترافية متناهية. سنعمل على إرساء القواعد الرياضية والبرمجية التي تجعل عملية التموضع الخارجي عملية منهجية قابلة للتكرار في مختلف أنواع الرسوم البيانية، سواء كانت مخططات تشتت (Scatter Plots)، أو خطوط سلاسل زمنية (Time Series)، أو رسوماً شريطية (Bar Plots).

تتمحور هيكلية الحل البرمجي المقترح حول التكامل المنهجي بين ثلاث أدوات أساسية يوفرها النظام البيئي للغة R:

  • توسيع هوامش الشكل الرسومي: باستخدام الدالة المركزية par() والمعلمة mar، لحجز مساحة بيضاء كافية في الجهة المستهدفة (يميناً، أو يساراً، أو أعلى، أو أسفل) لاستيعاب كامل أبعاد وسيلة الإيضاح.
  • تعطيل قيود القص البصري: من خلال ضبط المعلمة xpd = TRUE أو xpd = NA، مما يمنح محرك الرسم تصريحاً صريحاً بتجاوز حدود المحاور ورسم النصوص والرموز داخل الهوامش الموسعة.
  • المعايرة الموضعية الدقيقة: عبر توظيف وسائط دالة legend() المتقدمة، وتحديداً المعلمة inset والإحداثيات النسبية، لضبط موضع الصندوق بدقة متناهية تضمن عدم ملامسته لخطوط الإطار أو خروجه عن حدود الجهاز الإخراجي.

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

2. المفاهيم الأساسية لهندسة الرسوم والهوامش في نظام Base R Graphics

2.1 تشريح مناطق الرسم في R (Device, Figure, Plot Regions)

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

الطبقة الأولى والأشمل هي منطقة الجهاز الكلية (Device Region)، والتي تمثل الحجم المادي الكامل للنافذة الرسومية النشطة، سواء كانت شاشة تفاعلية تابعة لبيئة RStudio، أو ملف مخرجات رقمي مثل PNG أو PDF. تحيط بهذه المنطقة هوامش تسمى “الهوامش الخارجية” (Outer Margins)، وتُضبط عبر المعلمة oma في دالة par(). تُستخدم هذه المنطقة عادة لكتابة العناوين العامة التي تغطي لوحات رسومية متعددة عند تقسيم النافذة إلى عدة مخططات فرعية.

الطبقة الثانية هي منطقة الشكل (Figure Region)، وتقع داخل منطقة الجهاز وتضم كلاً من منطقة الرسم الفعلية والهوامش المحيطة بها المخصصة لتسميات المحاور، وعلامات التدريج (Tick Marks)، والعناوين الفرعية. تُحدد هذه الهوامش الداخلية بواسطة المعلمة mar (المقاسة بعدد أسطر النص) أو المعلمة mai (المقاسة بالبوصة المباشرة). تمثل منطقة الشكل المساحة الحيوية التي سنقوم بتوسيعها واستغلالها لوضع وسيلة الإيضاح الخارجية دون الاصطدام بحواف الجهاز.

الطبقة الثالثة والأعمق هي منطقة الرسم الفعلية (Plot Region)، وهي المستطيل الداخلي المحدد بالمحاور الرياضية (المحور السيني X والمحور الصادي Y)، حيث يتم إسقاط نقاط البيانات، والخطوط، والمضلعات، والمجسمات الإحصائية. في الحالة الطبيعية، تكون دالة legend() مقيدة بالعمل حصرياً داخل هذا المستطيل، وأي محاولة لتجاوزه دون تعديل معلمات الطبقات السابقة تؤدي حتماً إلى فشل بصري ناتج عن آليات القص الآلي في محرك R.

2.2 نظام الإحداثيات النسبي والمطلق للعناصر الرسومية

تتعامل بيئة R الرسومية مع أنظمة إحداثيات متعددة تترجم المواقع الرياضية المجردة إلى إحداثيات نقطية (Pixel Coordinates) على شاشات العرض والصفحات المطبوعة. النظام الأساسي المباشر هو نظام إحداثيات المستخدم (User Coordinates)، وهو النظام المرتبط بنطاق البيانات الفعلية المحددة بواسطة وسائط xlim و ylim. عند تنفيذ أمر رسم معين داخل المخطط، تتم ترجمة القيم العددية مباشرة إلى مواقع داخل منطقة الرسم الداخلية.

ومع ذلك، عند محاولة وضع عناصر خارج منطقة الرسم، يصبح الاعتماد الحصري على إحداثيات المستخدم أمراً معقداً وغير عملي، لأن الهوامش تقع تقنياً خارج النطاق الرياضي للمحاور. هنا تبرز الحاجة إلى فهم نظام الإحداثيات المعياري للجهاز (Normalized Device Coordinates – NDC) ونظام إحداثيات الشكل المعياري. تتيح هذه الأنظمة التعامل مع المساحة الرسومية كنسب مئوية تتراوح من 0 إلى 1 عبر أبعاد النافذة، مما يسمح بتحديد مواضع دقيقة للعناصر بغض النظر عن وحدات قياس البيانات الإحصائية المعروضة.

توفر دالة legend() جسراً برمجياً ذكياً يدمج بين الكلمات المفتاحية المكانية (مثل "topright" أو "bottomleft") ونظام إزاحة نسبي يعتمد على نسبة مئوية من أبعاد منطقة الرسم عبر المعلمة inset. عند استخدام الإزاحة السالبة بالتزامن مع تعديل صلاحيات الرسم الخارجي، تترجم بيئة R هذه النسب إلى إحداثيات فيزيائية تمتد مباشرة إلى مساحة الهوامش التي تم حجزها مسبقاً، مما يلغي الحاجة إلى إجراء حسابات يدوية معقدة لتحويل وحدات البيانات إلى أبعاد قياسية.

3. وظيفة الدالة par وتعديل معلمات الهوامش mar

3.1 التركيب البنيوي لمعلمة الهوامش mar في R

تُعد الدالة par() القلب النابض للتحكم في معلمات البيئة الرسومية في نظام Base R؛ حيث تتحكم في أكثر من سبعين متغيراً تشغيلياً يحدد مظهر وسلوك النوافذ والمخططات. من بين هذه المعلمات، تبرز المعلمة mar (Margins) كأداة محورية وأساسية لإعادة تشكيل وتوزيع المساحات المحيطة بمنطقة الرسم. تقبل المعلمة mar متجهاً عددياً رباعي الأبعاد يأخذ الصيغة الرياضية c(bottom, left, top, right)، ويمثل كل عنصر فيه حجم الهامش المقاس بوحدات أسطر النص (Text Lines).

الترتيب الافتراضي للهوامش في معظم بيئات R القياسية هو c(5.1, 4.1, 4.1, 2.1)، وهو ما يعني:

  • الهامش السفلي (Bottom = 5.1): مساحة واسعة نسبياً مخصصة لاستيعاب أرقام تدريج المحور السيني وتسمية المحور (X-axis Label).
  • الهامش الأيسر (Left = 4.1): مساحة كافية لأرقام تدريج المحور الصادي وتسمية المحور الرأسي (Y-axis Label).
  • الهامش العلوي (Top = 4.1): مساحة مخصصة للعنوان الرئيسي للمخطط (Main Title) والعناوين الفرعية المحتملة.
  • الهامش الأيمن (Right = 2.1): هامش ضيق جداً لا يحتوي عادة على أي تسميات نصية في المخططات القياسية أحادية المحور الصادي.

توضح هذه القيم الافتراضية بوضوح سبب استحالة رسم وسيلة إيضاح على الجانب الأيمن للمخطط دون تعديل مسبق؛ فالمساحة المتاحة (2.1 سطر) لا تكفي إطلاقاً لعرض صندوق وسيلة الإيضاح، والرموز النقطية، وسلاسل النصوص الوصفية المصاحبة لها. لذلك، فإن الخطوة البرمجية الأولى الحتمية في استراتيجيتنا تقتضي استدعاء الدالة par(mar = ...) وزيادة القيمة المخصصة للجهة المستهدفة—غالباً الهامش الأيمن—لتوفير المساحة المادية اللازمة لاستقبال وسيلة الإيضاح دون التأثير سلباً على وضوح منطقة البيانات.

3.2 حساب المساحة المطلوبة بدقة اعتماداً على حجم وسيلة الإيضاح

يتطلب تحديد القيمة العددية المناسبة لمعلمة mar موازنة دقيقة بين متطلبات وسيلة الإيضاح من جهة، والحفاظ على أبعاد جمالية متوازنة لمنطقة الرسم من جهة أخرى. تعتمد المساحة المطلوبة على عدة عوامل متغيرة، منها: عدد الحروف في أطول تسمية نصية (Label Length)، وحجم الخط المستخدم (الذي تضبطه المعلمة cex)، وما إذا كانت وسيلة الإيضاح تحتوي على عنوان فرعي بارز (Legend Title)، بالإضافة إلى نوع وسمك الرموز المستخدمة وحدود الصندوق الخارجي.

الصيغة البرمجية النموذجية والشائعة لتوسيع الهامش الأيمن هي تعيين المعلمة على النحو التالي: par(mar = c(5, 4, 4, 8)) أو c(5.1, 4.1, 4.1, 8.1). من خلال رفع الهامش الأيمن من 2.1 إلى 8 أو 9 أسطر، يتم حجز شريط جانبي عريض يعادل حوالي 20% إلى 30% من العرض الإجمالي للنافذة الرسومية. هذه المساحة تكون كافية تماماً لاستيعاب وسيلة إيضاح ذات نصوص متوسطة الطول تتألف من فئات متعددة، دون أن يحدث أي اقتطاع للحروف أو تداخل مع حافة نافذة الإخراج.

يجب على المحلل تجنب المبالغة في زيادة قيم الهوامش بشكل مفرط (مثل تعيين الهامش الأيمن إلى 15 أو 20 سطراً في نافذة صغيرة)؛ لأن ذلك يؤدي إلى ضغط منطقة الرسم الداخلية وتقليص حجمها إلى مستطيل ضيق ومشوه بصرياً، مما يفقد المخطط دقته الإحصائية ويجعل قراءة الاتجاهات الرياضية أمراً بالغ الصعوبة. إن التقدير البصري السليم والتجريب المنهجي يضمنان الوصول إلى النسبة الذهبية التي تحقق التوازن الهندسي الأمثل بين منطقة عرض البيانات ومساحة الهامش التفسيري.

3.3 إدارة الحالة البيئية لمعلمات الرسوم البيانية

من أهم المبادئ البرمجية في لغة R هي إدارة “الآثار الجانبية” (Side Effects) للوظائف والدوال. عند استدعاء الدالة par() وتعديل معلمات مثل mar أو xpd، تظل هذه الإعدادات الجديدة نشطة ومخزنة في الذاكرة الرسومية لجهاز الإخراج الحالي طوال جلسة العمل. يعني ذلك أن أي رسم بياني لاحق يتم تنفيذه في نفس الجلسة سيرث هذه الهوامش الموسعة تلقائياً، حتى وإن كان مخططاً بسيطاً لا يتطلب وسيلة إيضاح خارجية، مما يؤدي إلى إنتاج مخرجات غير متناسقة وتشويه الرسوم التالية.

لتجنب هذا السلوك غير المرغوب فيه وتطبيق أفضل الممارسات البرمجية المعتمدة لدى مطوري R المحترفين، يجب دائماً حفظ الحالة البيئية الأصلية قبل إجراء أي تعديل، ثم استعادتها فور الانتهاء من تصدير أو رسم الشكل المطلوب. يتم ذلك برمجياً عبر حفظ مخرجات الدالة par(no.readonly = TRUE) في متغير مستقل، ثم استدعاء هذا المتغير لاحقاً عبر دالة التنظيف، كما توضح الشيفرة المنهجية التالية:

يتم تخزين الإعدادات الأصلية عبر الأمر: old_par <- par(no.readonly = TRUE). بعد الانتهاء من تنفيذ جميع أوامر الرسم، وتحديد الهوامش، ورسم وسيلة الإيضاح، يتم إرجاع البيئة الرسومية إلى حالتها النقية باستخدام الأمر: par(old_par). يضمن هذا الإجراء الحفاظ على بيئة عمل نظيفة ومستقرة، ويمنع تراكم التعديلات الهيكلية غير المقصودة أثناء تنفيذ البرامج النصية الطويلة أو توليد التقارير الآلية باستخدام أدوات النشر الإحصائي.

4. التحكم في قص العناصر الرسومية باستخدام المعلمة xpd

4.1 المفهوم النظري لخاصية القص الرسومي (Clipping)

تُعد خاصية القص الرسومي (Clipping Region) في محركات الرسوميات بمثابة قناع رقمي غير مرئي (Mask) يحدد المساحة الجغرافية المسموح لوحدات البكسل بالظهور داخلها. في بيئة Base R، ترتبط هذه الخاصية ارتباطاً وثيقاً بالمعلمة xpd. الهدف الأصلي من تفعيل القص الرسومي هو منع الأخطاء البرمجية من تشويه مظهر المخططات؛ فعلى سبيل المثال، إذا كانت هناك نقاط بيانات تقع خارج النطاق المحدد لمحور السينات، يضمن نظام القص ألا تفيض هذه النقاط وترسم فوق تسميات المحاور أو خارج حدود الورقة.

السلوك الافتراضي الصارم في R هو تعيين xpd = FALSE. في ظل هذا الوضع الافتراضي، يتم قصر جميع عمليات الرسم على منطقة الرسم الداخلية (Plot Region) حصرياً. إذا قمت بتوسيع الهامش الأيمن بنجاح عبر المعلمة mar، ثم حاولت رسم وسيلة إيضاح في تلك المساحة الموسعة باستخدام إحداثيات خارجية، فإن محرك الرسم سيطبق قناع القص فوراً، مما يؤدي إلى إخفاء وسيلة الإيضاح تماماً وكأنها لم تُكتب في الكود البرمجي، على الرغم من أن المساحة المادية موجودة وجاهزة.

إن نسيان ضبط المعلمة xpd هو الخطأ الأكثر شيوعاً وإحباطاً الذي يواجهه الباحثون والمبرمجون المبتدئون في R عند محاولة وضع العناصر خارج المخطط. يفترض الكثيرون خطأً أن توسيع الهامش كافٍ بذاته لاستقبال العناصر الرسومية، في حين أن الهامش الموسع يظل أرضاً محظورة برمجياً ما لم يتم تعديل صلاحيات القص الرسومي صراحة عبر إعطاء القيمة المناسبة للمعلمة xpd.

4.2 مستويات وخيارات المعلمة xpd

توفر لغة R ثلاثة مستويات تدرجية دقيقة للتحكم في قناع القص الرسومي من خلال المعلمة xpd، ويتيح كل مستوى منها نطاقاً جغرافياً مختلفاً لحرية حركة العناصر البصرية:

المستوى الأول: xpd = FALSE (الوضع الافتراضي)
يتم قص جميع العناصر الرسومية وحصرها بدقة داخل حدود منطقة الرسم (Plot Region) المحددة بالمحاور. لا يمكن لأي نص أو رمز أن يظهر في الهوامش المحيطة ما لم يكن جزءاً من الدوال المخصصة للهوامش مثل mtext() أو title().

المستوى الثاني: xpd = TRUE (مستوى منطقة الشكل – Figure Region)
يقوم هذا الخيار بتوسيع قناع القص ليشمل كامل “منطقة الشكل” (Figure Region)، والتي تتضمن منطقة الرسم مضافاً إليها جميع الهوامش الأربعة المحددة بواسطة المعلمة mar. يُعد هذا الخيار هو المعيار الذهبي والموصى به دائماً لوضع وسائل الإيضاح خارج المخطط؛ حيث يتيح رسم وسيلة الإيضاح بحرية تامة داخل الهامش الأيمن، أو العلوي، أو السفلي الموسع، مع منعها في الوقت نفسه من التمدد العشوائي خارج حدود النافذة الرسومية الكلية.

Legend location outside of plot in R
Legend location outside of plot in R

المستوى الثالث: xpd = NA (مستوى جهاز الإخراج الكلي – Device Region)
يقوم هذا الخيار بتعطيل القص الرسومي تماماً وبشكل مطلق عبر كامل “منطقة الجهاز” (Device Region)، بما في ذلك الهوامش الخارجية (Outer Margins). يُستخدم هذا الخيار المتقدم عند بناء لوحات بيانية معقدة تتألف من عدة مخططات متجاورة (Multi-panel Plots)، حيث تكون هناك حاجة لوضع وسيلة إيضاح واحدة مشتركة في أقصى زاوية النافذة الكلية لخدمة جميع المخططات في آن واحد.

في معظم التطبيقات العملية التي تتضمن مخططاً بيانياً واحداً، يكون الخيار xpd = TRUE هو الخيار الأمثل والأكثر أماناً؛ إذ يوفر التوازن الدقيق بين تمكين الرسم في الهوامش الموسعة والحفاظ على الانضباط الهندسي للشكل النهائي.

5. البنية التركيبية الشاملة لدالة legend وتخصيص معلماتها

5.1 الوسائط المكانية والكلمات المفتاحية لموضع الدالة

تمتلك دالة legend() في لغة R بنية برمجية غنية تتيح مرونة فائقة في تحديد الموقع الهندسي لوسيلة الإيضاح. يمكن تحديد الموضع عبر طريقتين رئيسيتين: الطريقة الأولى هي التحديد المباشر للإحداثيات الديكارتية عبر تمرير قيم عددية للموقع السيني والصادي legend(x, y, ...)، وهي طريقة تتطلب حسابات دقيقة تعتمد على نطاق المحاور. أما الطريقة الثانية والأكثر شيوعاً وكفاءة، فهي استخدام الكلمات المفتاحية المكانية التسع المدمجة في النظام: "topright"، و "topleft"، و "bottomright"، و "bottomleft"، و "top"، و "bottom"، و "left"، و "right"، و "center".

عند استخدام الكلمات المفتاحية المكانية داخل منطقة الرسم العادية، تقوم R بمحاذاة زاوية صندوق وسيلة الإيضاح مع الأركان الداخلية للمخطط. ولكن السحر البرمجي الحقيقي يبدأ عندما نقوم بدمج الكلمة المفتاحية مثل "topright" مع تفعيل الهامش الموسع وضبط xpd = TRUE؛ حيث تصبح هذه الكلمة المفتاحية بمثابة نقطة ارتكاز أولية تنطلق منها معلمات الإزاحة لدفع الصندوق بسلاسة إلى الفراغ الخارجي للهامش دون الحاجة لمعرفة القيم الرقمية للمحاور.

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

5.2 تخصيص المحتوى والرموز داخل وسيلة الإيضاح

لضمان قيام وسيلة الإيضاح بدورها الدلالي على أكمل وجه، توفر دالة legend() مصفوفة متكاملة من المعلمات المتخصصة في مطابقة الخصائص البصرية لعناصر الرسم. الوسيط الأساسي هو legend، والذي يستقبل متجهاً نصياً يحتوي على أسماء الفئات أو المجموعات التجريبية (مثل c("المجموعة أ", "المجموعة ب")). يجب أن يتطابق طول هذا المتجه النصي بدقة مع متجهات الخصائص البصرية الممررة للدالة.

تشمل المعلمات البصرية المحورية ما يلي:

  • رموز النقاط pch (Plotting Characters): تستقبل متجهاً من الأرقام الصحيحة أو الرموز لتمثيل أشكال النقاط المستخدمة في مخطط التشتت (مثل pch = c(1, 3) لمطابقة الدوائر وعلامات الجمع).
  • أنماط الخطوط lty (Line Types): تستقبل قيماً تحدد نوع الخط المستخدم (مثل lty = c(1, 2) للخط المتصل والمتقطع)، وتُستخدم في مخططات السلاسل الزمنية والانحدار.
  • سمك الخطوط lwd (Line Width): لضبط سماكة الخطوط ومطابقتها للمنحنيات المرسومة.
  • لوحة الألوان col: متجهة من الألوان النصية أو السداسية عشرية (Hex Codes) لربط كل فئة بلونها المخصص داخل الرسم.
  • عنوان وسيلة الإيضاح title: وسيط نصي يتيح وضع رأس توضيحي أعلى عناصر وسيلة الإيضاح لبيان اسم المتغير التصنيفي.

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

5.3 التحكم في المظهر الجمالي والحدود الخارجية

لا تقتصر وظيفة دالة legend() على نقل المعلومات الدلالية فقط، بل تمتد لتشمل حزمة واسعة من المعلمات المخصصة للتحكم في الجوانب الجمالية والطباعية للصندوق التفسيري. من أهم هذه المعلمات المعلمة bty (Box Type)، التي تتحكم في الإطار المحيط بوسيلة الإيضاح؛ حيث يؤدي تعيين bty = "o" إلى رسم إطار مستطيل كامل حول العناصر، بينما يؤدي تعيين bty = "n" (None) إلى إزالة الإطار تماماً، وهو مظهر عصري يُفضله العديد من المصممين والناشرين لتقليل التلوث البصري والتشويش الهندسي.

كما تتيح المعلمات bg و box.col و box.lwd التحكم في لون خلفية الصندوق، ولون خط الإطار، وسمكه على التوالي. عند وضع وسيلة الإيضاح في الهوامش الخارجية، يُفضل غالباً جعل الخلفية شفافة أو مطابقة للون خلفية الصفحة العامة لضمان اندماج الصندوق بسلاسة مع الهيكل الكلي للشكل. بالإضافة إلى ذلك، يمكن استخدام المعلمة cex (Character Expansion) للتحكم في الحجم الكلي لنصوص ورموز وسيلة الإيضاح كنسبة مئوية من الحجم القياسي، مما يتيح تصغيرها أو تكبيرها لتناسب المساحة المحجوزة في الهامش بدقة متناهية.

للتحكم في المسافات الداخلية وضغط العناصر رأسياً أو أفقياً، توفر الدالة المعلمتين y.intersp و x.intersp، اللتين تحددان المسافة النسبية الفاصلة بين الأسطر والأعمدة داخل صندوق الإيضاح. يتيح ضبط هذه المعلمات مرونة فائقة في تصميم وسائل إيضاح مدمجة وأنيقة تلبي أدق متطلبات التصميم الجرافيكي المتقدم.

6. الخطوات العملية: إعداد البيانات وتجهيز مساحة العمل

6.1 توليد وهيكلة مجموعات البيانات التجريبية

لتطبيق المفاهيم النظرية المتقدمة بشكل عملي وملموس، سنقوم بتوليد مجموعتي بيانات تجريبيتين تحاكيان تجربة علمية مقارنة تتضمن متغيرين مستقلين ومتغيرات تابعة مرتبطة بعلاقات خطية وغير خطية. سنعتمد على دوال التوليد العشوائي المدمجة في R مع تثبيت البذرة العشوائية (Random Seed) لضمان قابلية تكرار النتائج بدقة عبر مختلف الأجهزة والبيئات التشغيلية.

سنقوم بإنشاء إطار البيانات الأول df1 ليمثل المجموعة الضابطة (Control Group)، وإطار البيانات الثاني df2 ليمثل المجموعة التجريبية (Treatment Group). يحتوي كل إطار على خمسين مشاهدة إحصائية تمثل توزيعاً طبيعياً مع إضافة مكون عشوائي لمحاكاة البيانات الحقيقية في المختبرات والمسوح الميدانية. تتلخص بنية توليد البيانات في الشيفرة الإحصائية المعتمدة على الدوال الأساسية:

نقوم بتحديد البذرة العشوائية وتوليد المتغيرات عبر الأوامر التالية:

set.seed(101)

x_vals <- seq(1, 50, by = 1)

y_group1 <- 2.5 * x_vals + rnorm(50, mean = 0, sd = 15)

y_group2 <- 1.8 * x_vals + 30 + rnorm(50, mean = 0, sd = 12)

df1 <- data.frame(X = x_vals, Y = y_group1)

df2 <- data.frame(X = x_vals, Y = y_group2)

قبل الشروع في عمليات الرسم، من الضروري فحص نطاقات القيم (Ranges) للمتغيرات التابعة والمستقلة للتأكد من أن حدود المحاور التي سيتم رسمها ستستوعب كلا المجموعتين معاً دون اقتطاع لأي نقاط تجريبية، وذلك باستخدام دالتي range(c(df1$Y, df2$Y)) و range(x_vals) لتحديد الأبعاد القصوى لمنطقة الرسم.

6.2 تهيئة بيئة R الرسومية قبل استدعاء أدوات الرسم

تتطلب التهيئة الاحترافية لبيئة الرسم ضبط أبعاد نافذة المخرجات الرسومية بصورة متناسبة لمنع تشوه النصوص أو انضغاط المسافات البينية عند إضافة الهوامش الموسعة. عند العمل في البيئات التفاعلية أو عند كتابة برامج نصية لتصدير الصور، يجب تعيين أبعاد هندسية تتسع للمخطط والهامش الإضافي معاً، كأن نحدد نسبة عرض إلى ارتفاع تبلغ 8:6 أو 9:6 بوصة بدلاً من النسبة المربعة القياسية.

تتضمن التهيئة أيضاً تحديد استراتيجية لونية ورمزية موحدة وواضحة تلبي معايير إمكانية الوصول والتفريق البصري. سنعتمد في تطبيقنا العملي على لوحة ألوان عالية التباين، واستخدام رموز نقطية كلاسيكية ومتباينة بوضوح: الدوائر المفرغة (pch = 1) باللون الأزرق الداكن لتمثيل المجموعة الأولى df1، وعلامات الجمع المتقاطعة (pch = 3) باللون الأحمر القاني لتمثيل المجموعة الثانية df2.

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

7. التطبيق العملي الأساسي: رسم وسيلة الإيضاح خارج المخطط في الزاوية العلوية اليمنى

7.1 الخطوة الأولى: تعديل معلمات الهوامش وفك قيد القص

نبدأ الآن في تنفيذ الاستراتيجية البرمجية المتكاملة لوضع وسيلة الإيضاح خارج حدود المخطط البياني في الزاوية العلوية اليمنى. الخطوة التأسيسية الأولى والحرجة تكمن في استدعاء الدالة par() وتمرير المعلمتين mar و xpd في أمر برمجي واحد متزامن قبل تنفيذ أي أمر رسم فعلي على شاشة الجهاز.

نقوم بتنفيذ الأمر البرمجي التالي:

par(mar = c(5.1, 4.1, 4.1, 8.5), xpd = TRUE)

دعنا نحلل التأثير الفوري والدقيق لهذا السطر البرمجي:

  • قامت المعلمة mar = c(5.1, 4.1, 4.1, 8.5) بإعادة تقسيم النافذة الرسومية، حيث حافظت على الهوامش السفلي والأيسر والعلوي عند أبعادها القياسية، في حين قامت برفع الهامش الأيمن من 2.1 إلى 8.5 أسطر. أدى هذا التعديل إلى تقليص مساحة منطقة الرسم الداخلية بنسبة مدروسة جهة اليسار، وتوفير شريط هوامش أيمن فسيح يمتد بعرض 8.5 أسطر طباعية.
  • قامت المعلمة xpd = TRUE بتوسيع نطاق قناع القص البصري الرسومي من منطقة الرسم الداخلية إلى كامل منطقة الشكل الموسعة. بموجب هذا الأمر، تم منح الضوء الأخضر لجميع دوال الرسم اللاحقة لرسم النصوص والرموز والصناديق داخل هذا الشريط الأيمن دون أن تتعرض للاقتطاع أو الإخفاء.
Base plot in R with legend outside of plot to the right
Base plot in R with legend outside of plot to the right

7.2 الخطوة الثانية: رسم المخطط الأساسي ونقاط البيانات المتعددة

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

تتم صياغة كود الرسم الأساسي وإضافة المجموعة الثانية على النحو التالي:

plot(df1$X, df1$Y, pch = 1, col = "darkblue", xlim = c(1, 50), ylim = range(c(df1$Y, df2$Y)), xlab = "المتغير المستقل (X)", ylab = "المتغير التابع (Y)", main = "مقارنة الاتجاهات بين المجموعات التجريبية", las = 1)

points(df2$X, df2$Y, pch = 3, col = "firebrick")

abline(lm(df1$Y ~ df1$X), col = "darkblue", lty = 2)

abline(lm(df2$Y ~ df2$X), col = "firebrick", lty = 4)

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

7.3 الخطوة الثالثة: استدعاء دالة legend وتثبيتها خارجياً

نصل الآن إلى الخطوة الحاسمة، وهي استدعاء دالة legend() لتثبيت وسيلة الإيضاح في ذلك الهامش الأيمن المجهز. سنستخدم الكلمة المفتاحية "topright" كنقطة انطلاق، وسنطبق إزاحة أفقية سالبة مدروسة باستخدام المعلمة inset لدفع الصندوق خارج حدود المخطط مباشرة.

يتم تنفيذ أمر وسيلة الإيضاح بالشكل البرمجي التالي:

legend("topright", inset = c(-0.32, 0), legend = c("المجموعة الضابطة (df1)", "المجموعة التجريبية (df2)"), pch = c(1, 3), lty = c(2, 4), col = c("darkblue", "firebrick"), title = "فئات العينة", bty = "o", bg = "white", cex = 0.85)

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

8. التحكم الدقيق في موضع وسيلة الإيضاح باستخدام المعلمة inset

8.1 آلية عمل الوسيط inset رياضياً وهندسياً

تُعد المعلمة inset في دالة legend() الأداة الحسابية الدقيقة المسؤولة عن تحريك وسيلة الإيضاح وإزاحتها نسبة إلى الموقع الأساسي المحدد بالكلمة المفتاحية. تقبل المعلمة inset قيمة عددية مفردة (تطبق بالتساوي على المحورين) أو متجهاً ثنائياً c(x_inset, y_inset) يحدد نسبة الإزاحة بشكل منفصل على المحور الأفقي والمحور الرأسي.

تُعبر قيم inset هندسياً عن نسبة مئوية كسرية من الأبعاد الكلية لمنطقة الرسم (Plot Region). على سبيل المثال:

  • القيمة الموجبة للإزاحة الأفقية (مثل 0.05) تعني تحريك وسيلة الإيضاح إلى الداخل بمقدار 5% من عرض منطقة الرسم بعيداً عن الحافة.
  • القيمة السالبة للإزاحة الأفقية (مثل -0.20) تعني دفع وسيلة الإيضاح إلى الخارج بمقدار 20% من عرض منطقة الرسم متجاوزة خط الإطار الخارجي نحو الهامش المحيط.
  • القيمة الصفرية للمحور الرأسي (مثل 0 في c(-0.25, 0)) تعني الحفاظ على المحاذاة الرأسية التامة مع الحافة العلوية دون أي إزاحة صعوداً أو هبوطاً.

تتميز هذه الآلية بنعومتها الفائقة؛ إذ تتيح للمحلل التحكم في موضع الصندوق بكسور عشرية دقيقة، مما يسمح بضبط المسافة الفاصلة بين خط الإطار وحدود وسيلة الإيضاح لتكون متناسقة ومريحة للعين دون ترك فراغات بيضاء مفرطة أو إحداث التصاق بصري غير محبب.

8.2 المعايرة الدقيقة للإزاحة لتجنب الاقتطاع عند الحافة الخارجية

تتطلب المعايرة الدقيقة لقيم inset مراعاة العلاقة التناسبية بين ثلاثة عوامل: حجم الهامش المحجوز في mar، وقيمة الإزاحة السالبة في inset، والحجم الكلي لصندوق وسيلة الإيضاح (الذي يتأثر بطول النصوص وقيمة cex). إذا كانت الإزاحة السالبة صغيرة جداً (مثل -0.05)، فقد يظل جزء من وسيلة الإيضاح متداخلاً مع خط الإطار الأيمن للمخطط. أما إذا كانت الإزاحة السالبة كبيرة جداً (مثل -0.50)، فإن وسيلة الإيضاح ستُدفع بعيداً جداً إلى أقصى اليمين، مما يؤدي إلى خروج نصوصها عن الحافة المادية للجهاز الرسومي واقتطاعها بصرياً.

يوضح الجدول التالي دليلاً استرشادياً للعلاقة بين الهامش الأيمن وقيم الإزاحة المثالية في النوافذ الرسومية القياسية:

  • عند استخدام هامش mar = c(5, 4, 4, 6) ونصوص قصيرة: تكون الإزاحة المناسبة حوالي inset = c(-0.20, 0).
  • عند استخدام هامش mar = c(5, 4, 4, 8.5) ونصوص متوسطة: تكون الإزاحة المناسبة حوالي inset = c(-0.30, 0) إلى c(-0.35, 0).
  • عند استخدام هامش mar = c(5, 4, 4, 11) ونصوص طويلة أو مركبة: تكون الإزاحة المناسبة حوالي inset = c(-0.42, 0) مع ضبط cex = 0.8.

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

9. تقنيات متقدمة: وضع وسيلة الإيضاح في جهات متعددة (أسفل، أعلى، يسار المخطط)

9.1 تثبيت وسيلة الإيضاح أسفل المخطط البياني في شكل أفقي

في العديد من التقارير الإحصائية والأوراق العلمية التي تتطلب استخدام كامل عرض الصفحة للمخطط البياني، يُعد وضع وسيلة الإيضاح أسفل الرسم خياراً تصميمياً فائق الجودة والفعالية. لتحقيق ذلك بنجاح، يجب تطبيق مبدأ الترتيب الأفقي للعناصر (Horizontal Layout) لمنع وسيلة الإيضاح من التمدد رأسياً والتداخل مع أرقام وتسميات محور السينات.

تتم هذه العملية عبر الخطوات البرمجية التالية:

  • توسيع الهامش السفلي (العنصر الأول في متجهة mar) ليتسع لتسمية المحور ووسيلة الإيضاح معاً: par(mar = c(8, 4.1, 4.1, 2.1), xpd = TRUE).
  • رسم المخطط البياني وتسمية المحاور بصورة اعتيادية.
  • استدعاء دالة legend() باستخدام الكلمة المفتاحية "bottom" مع تفعيل الوسيط horiz = TRUE وإزاحة رأسية سالبة:

    legend("bottom", inset = c(0, -0.38), legend = c("شاهد 1", "معاملة 2", "معاملة 3"), pch = c(1, 2, 3), col = c("black", "blue", "red"), horiz = TRUE, bty = "n", cex = 0.9)

يضمن تفعيل horiz = TRUE رصف الفئات والرموز جنباً إلى جنب في صف أفقي واحد ممتد بعرض أسفل المخطط، مما يحافظ على التوازن البصري العام للشكل ويمنح القارئ تجربة قراءة طبيعية وسلسة من اليسار إلى اليمين.

9.2 تثبيت وسيلة الإيضاح أعلى المخطط (Header Placement)

يمثل وضع وسيلة الإيضاح في الهامش العلوي أعلى منطقة الرسم (Header Placement) استراتيجية ممتازة في المخططات التي تتضمن مقارنة اتجاهات زمنية سريعة، حيث تلفت وسيلة الإيضاح انتباه القارئ فوراً قبل البدء في استكشاف تفاصيل المنحنيات البيانية المعقدة.

لتطبيق هذا النمط المتقدم:

  • نقوم بتوسيع الهامش العلوي (العنصر الثالث في mar): par(mar = c(5.1, 4.1, 7.5, 2.1), xpd = TRUE).
  • نقوم برسم المخطط البياني مع مراعاة موضع العنوان الرئيسي. يمكن وضع العنوان الرئيسي باستخدام دالة title() أو mtext() في سطر مرتفع (مثل line = 5) لترك مساحة كافية تحته لوسيلة الإيضاح.
  • نستدعي دالة legend() في الموقع "top" مع إزاحة رأسية موجبة نسبياً تدفع الصندوق إلى الأعلى خارج الإطار:

    legend("top", inset = c(0, -0.22), legend = c("النموذج الخطي", "النموذج اللوجستي"), lty = c(1, 2), lwd = 2, col = c("navy", "darkgreen"), horiz = TRUE, bty = "o", bg = "gray98")

يتيح هذا التنسيق توزيعاً هندسياً فريداً يشبه الترويسة الأكاديمية الاحترافية، ويصلح بشكل خاص للعروض التقديمية والملصقات العلمية (Posters) حيث تكون مساحة الرؤية العلوية ذات قيمة إدراكية عالية.

9.3 وضع وسيلة الإيضاح على الجانب الأيسر من المخطط

على الرغم من أن وضع وسيلة الإيضاح على اليسار يُعد أقل شيوعاً مقارنة بالجانب الأيمن، إلا أنه يصبح حلاً تصميمياً مثالياً في اللغات التي تُقرأ من اليمين إلى اليسار، أو في المخططات الإحصائية التي تحتوي على محاور صادية ثانوية مزدوجة على الجانب الأيمن (Dual Y-axes)، مما يجعل الهامش الأيمن مشغولاً بالكامل ومحجوزاً لبيانات المحور الثاني.

يتطلب التموضع الأيسر الحذر الشديد لتفادي التداخل مع أرقام تدريج وتسميات محور الصادات الأساسي. يتم ضبط ذلك برمجياً عبر:

  • توسيع الهامش الأيسر (العنصر الثاني في mar) إلى قيمة واسعة: par(mar = c(5.1, 9.5, 4.1, 2.1), xpd = TRUE).
  • استدعاء دالة legend() بالكلمة المفتاحية "topleft" مع إزاحة أفقية سالبة تدفع وسيلة الإيضاح نحو أقصى اليسار متجاوزة تسميات المحور الصادي:

    legend("topleft", inset = c(-0.48, 0), legend = c("سلسلة أ", "سلسلة ب"), pch = 16, col = c("purple", "orange"), bty = "n")

بهذه الطريقة، يتم استغلال المساحة اليسرى المحجوزة بكفاءة، وتبقى تسميات المحور الصادي واضحة ومقروءة دون أي عائق بصري أو تراكب بين النصوص والرموز.

10. مقارنة منهجية بين Base R وحزم التصور المتقدمة (مثل ggplot2) في إدارة مفاتيح الرسوم

10.1 فلسفة وضع وسيلة الإيضاح في Base R مقابل ggplot2

تختلف الفلسفة التصميمية والبرمجية لإدارة وسائل الإيضاح بين نظام Base R ونظام ggplot2 القائم على قواعد “قواعد البيانات الرسومية” (Grammar of Graphics). في بيئة ggplot2، تُعامل وسيلة الإيضاح ككائن هيكلي يُولد تلقائياً كدالة للجماليات المرتبطة بالبيانات (Aesthetic Mappings مثل aes(color = group)). يتم وضع وسيلة الإيضاح خارج منطقة الرسم افتراضياً على الجانب الأيمن، وتتم إدارتها عبر أوامر مظهرية بسيطة مثل theme(legend.position = "bottom") أو theme(legend.position = "none")، دون حاجة لتدخل يدوي في حساب الهوامش أو فك قيود القص.

في المقابل، يتبنى Base R فلسفة “لوحة الرسام المباشرة” (Canvas Approach)؛ حيث لا يفترض النظام أي معرفة مسبقة بالمعنى الدلالي للبيانات، بل يمنح المبرمج تحكماً دقيقاً ومباشراً في كل بكسل ووحدة قياس. في Base R، لا يتم توليد وسيلة الإيضاح آلياً، بل يقوم الباحث برسمها كطبقة مستقلة تماماً، مما يتطلب ضبطاً يدوياً لمعلمات الهوامش mar وصلاحيات القص xpd والإزاحات inset. هذه المقاربة، رغم أنها تتطلب خطوات برمجية أكثر، تمنح المحلل سلطة مطلقة وتحكماً هندسياً لا نهائياً لا يتقيد بالقوالب الصارمة لحزم الطبقات الرسومية الحديثة.

10.2 متى يفضل استخدام Base R لتصميم المخططات خارج الحدود؟

على الرغم من الشعبية الجارفة لحزمة ggplot2، يظل نظام Base R الخيار المفضل والمتفوق تقنياً في العديد من السيناريوهات الإنتاجية والأكاديمية المتقدمة للأسباب التالية:

  • الأداء والسرعة الحسابية الفائقة: يتميز Base R بخفة وزنه وسرعته الاستثنائية في معالجة مئات الآلاف من نقاط البيانات وإنتاج الرسوم في أجزاء من الثانية، وهو ما يجعله الخيار الأول في الحوسبة الإحصائية المكثفة وعمليات المحاكاة (Monte Carlo Simulations) الكبرى.
  • الاستقلالية وانعدام التبعيات (Zero-Dependencies): لا يتطلب Base R تثبيت أو تحميل أي حزم خارجية قد تتعرض للتحديث أو كسر التوافقية العكسية (Breaking Changes) في بيئات الإنتاج الحرجة والمخدمات الآلية.
  • التحكم المطلق في الطباعة والنشر الهندسي: يتيح Base R للمصممين ضبط المسافات المادية بالبوصة أو الأسطر بدقة متناهية تتوافق مباشرة مع متطلبات القياس والطباعة في المجلات العلمية التقليدية التي تفرض معايير حجم صارمة لكل عمود في الصفحة.
  • التوافق مع الأكواد الإحصائية الكلاسيكية: تعتمد آلاف الحزم الإحصائية المعتمدة في شبكة CRAN على دوال الرسم الأساسية في مخرجاتها التشخيصية (مثل رسوم التحقق من افتراضات الانحدار plot.lm)، مما يجعل إتقان تعديل هوامش Base R مهارة لا غنى عنها لأي إحصائي محترف.

11. الأخطاء الشائعة واستكشاف المشكلات وحلها عند وضع وسيلة الإيضاح خارج المخطط

11.1 مشكلة اختفاء وسيلة الإيضاح بالكامل أو ظهور جزء منها فقط

تُعد ظاهرة “اختفاء وسيلة الإيضاح” العَرَض الأكثر تكراراً عند محاولة الرسم في الهوامش الخارجية. يرجع هذا الخطأ دائماً إلى أحد سببين برمجين محددين بدقة:

  • السبب الأول: إغفال المعلمة xpd = TRUE: إذا تم تحديد إحداثيات خارجية لصندوق الإيضاح مع بقاء xpd = FALSE (القيمة الافتراضية)، فإن محرك الرسم يقوم بقص وإلغاء ظهور أي عنصر يقع خارج خطوط المحاور. الحل الفوري هو التأكد من تضمين xpd = TRUE داخل استدعاء دالة par() أو تمريرها كمعلمة مباشرة داخل دالة legend(..., xpd = TRUE).
  • السبب الثاني: عدم كفاية الهامش المحجوز في mar: إذا كان الهامش الأيمن صغيراً جداً (مثلاً mar[4] = 4 في حين تتطلب النصوص 8 أسطر)، فستظهر وسيلة الإيضاح مقطوعة من طرفها الأيمن، وتختفي نهايات الكلمات. الحل يكمن في زيادة قيمة الهامش الأيمن تدريجياً في par(mar = ...) حتى تصبح كامل النصوص مرئية بوضوح.

من الأخطاء الخفية أيضاً استدعاء par(mar = ...) بعد تنفيذ دالة plot()؛ إذ يجب دائماً استدعاء دالة تعديل الهوامش قبل فتح وتدشين المخطط البياني الجديد لكي تأخذ التعديلات مجراها الهندسي على المساحة الإجمالية.

11.2 مشكلة تشوه أبعاد الرسم البياني (Plot Distortion)

عندما يقوم المبرمج بزيادة الهوامش الجانبية بشكل مبالغ فيه (مثل تعيين الهامش الأيمن إلى 12 أو 15 سطراً لاستيعاب وسيلة إيضاح ضخمة)، قد تنكمش منطقة الرسم الداخلية وتتحول إلى شريط عمودي ضيق، مما يؤدي إلى تشويه “نسبة العرض إلى الارتفاع” (Aspect Ratio) الخاصة بالبيانات، وجعل قراءة المنحنيات الإحصائية مضللة أو غير مريحة بصرياً.

لعلاج هذه المشكلة واستعادة التوازن البصري:

  • إعادة ضبط أبعاد نافذة الجهاز الرسومي: بدلاً من تقليص مساحة البيانات، قم بزيادة العرض الإجمالي للنافذة عند تصدير الشكل، مثلاً عبر تعيين png("plot.png", width = 10, height = 6, units = "in", res = 300)، مما يوفر مساحة إجمالية أوسع تتسع لمنطقة رسم متناسقة وهامش عريض في آن واحد.
  • تقسيم النافذة باستخدام دالة layout(): بدلاً من الاعتماد الحصري على هوامش par(mar)، يمكن تقسيم النافذة برمجياً إلى عمودين غير متساويين عبر دالة layout(matrix(c(1, 2), nrow = 1), widths = c(3, 1))؛ حيث يُخصص العمود الأكبر للمخطط البياني والعمود الأصغر لرسم وسيلة الإيضاح كشكل مستقل تماماً، وهو تكنيك هندسي متقدم يضمن استقرار أبعاد البيانات بنسبة 100%.

11.3 مشاكل التصدير والحفظ (PDF, PNG, SVG)

من الظواهر المربكة في R أن المخطط البياني الذي يبدو مثالياً داخل نافذة العرض التفاعلية في بيئة التطوير (RStudio Plots Pane) قد يظهر مشوهاً أو تقتطع وسيلة إيضاحه عند حفظه وتصديره إلى ملفات رقمية مثل PNG أو PDF. يرجع هذا التباين إلى اختلاف الأبعاد الافتراضية، ونسب الدقة النقطية (DPI)، وحجم خطوط النصوص بين شاشة العرض ومشغلات الأجهزة الرسومية المستقلة (Graphics Device Drivers).

لضمان الحصول على مخرجات مطابقة تماماً للمعاينة:

  • حدد دائماً الأبعاد المادية الصريحة ووحدات القياس الثابتة داخل دوال فتح أجهزة الإخراج:

    pdf("scientific_plot.pdf", width = 8.5, height = 5.5, paper = "special")

    أو للملفات النقطية:

    png("scientific_plot.png", width = 2400, height = 1600, res = 300)
  • قم دائماً بإغلاق جهاز الإخراج بشكل سليم عبر الأمر الحتمي dev.off() بعد اكتمال أوامر الرسم؛ لضمان كتابة جميع وحدات البكسل إلى القرص الصلب وتفريغ الذاكرة المؤقتة.
  • استخدم القيم النسبية لحجم النصوص cex داخل وسيلة الإيضاح لتتناسب طردياً مع دقة الشاشة وتفادي تكبير النصوص بشكل عشوائي عند التصدير.

12. أفضل الممارسات والتوصيات الأكاديمية لإنتاج رسوم بيانية جاهزة للنشر العلمي

12.1 المعايير البصرية وسهولة القراءة وفقاً للمجلات العلمية

تضع الدوريات العلمية المرموقة (مثل Nature و Science و IEEE) معايير تحريرية وتصميمية بالغة الدقة لقبول الأشكال والرسوم التوضيحية. يجب أن يتوافق تموضع وسيلة الإيضاح الخارجية مع هذه المعايير لضمان سرعة قبول الورقة البحثية ووضوح مخرجاتها. تشمل أهم التوصيات البصرية ما يلي:

  • سهولة القراءة عند التصغير الطباعي: تُطبع الرسوم في المجلات عادة بعرض عمود واحد (حوالي 85 ملم إلى 90 ملم). يجب اختيار أحجام خطوط (cex بين 0.75 و 0.9) تضمن بقاء نصوص وسيلة الإيضاح مقروءة بوضوح تام حتى بعد تصغير الشكل ليناسب قياس العمود الورقي.
  • التوافق مع عمى الألوان (Colorblind-Safe Palettes): تجنب استخدام الجمع التقليدي بين الأحمر والأخضر لتمييز الفئات في وسيلة الإيضاح. يُوصى بالاعتماد على لوحات ألوان معيارية ومثبتة علمياً مثل لوحة Viridis أو ColorBrewer، أو دمج التباين اللوني مع تباين أشكال الرموز النقطية (pch) لضمان قدرة جميع القراء على التمييز بين المجموعات.
  • الاتساق الطباعي للخطوط (Typography Consistency): احرص على مطابقة نوع الخط المستخدم في وسيلة الإيضاح والعناوين (مثل Arial أو Times New Roman) مع نوع الخط المعتمد في متن البحث العلمي، مما يمنح الورقة مظهراً احترافياً متكاملاً.

12.2 كتابة دوال مخصصة قابلة لإعادة الاستخدام لرسم وسيلة الإيضاح الخارجية

لتحقيق أعلى درجات الكفاءة البرمجية وتجنب تكرار كتابة سطور إعداد الهوامش في كل رسم، يُوصى ببناء دوال تغليف برمجية مخصصة (Wrapper Functions) تجمع بين إدارة معلمات par()، ورسم المخطط، وحساب إزاحات legend() آلياً. يضمن هذا النهج المعياري قابلية التكرار العلمي (Reproducibility) وسهولة صيانة الأكواد عبر المشاريع البحثية الضخمة.

توضح الشيفرة التالية نموذجاً لدالة مخصصة ومرنة تتيح إضافة وسيلة إيضاح خارجية بضغطة زر واحدة:

add_external_legend <- function(labels, colors, pchs = NULL, ltys = NULL, title = NULL, margin_right = 8.5, inset_val = -0.32, ...) {
  par(xpd = TRUE)
  legend("topright", inset = c(inset_val, 0), legend = labels, col = colors, pch = pchs, lty = ltys, title = title, bty = "n", cex = 0.85, ...)
}

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

خاتمة

يمثل إتقان التحكم في تموضع وسيلة الإيضاح خارج حدود المخطط البياني في نظام Base R Graphics مهارة تقنية وفنية فارقة تنقل المحلل الإحصائي والباحث الأكاديمي من مستوى المخرجات الافتراضية البسيطة إلى مستوى الاحترافية والجاهزية للنشر العلمي الرصين. على الرغم من أن السلوك الافتراضي لمحرك الرسوميات في R يفرض قيوداً صارمة تتعلق بالقص البصري وحصر العناصر داخل نطاق المحاور، إلا أن الفهم العميق لثلاثية: توسيع الهوامش عبر المعلمة mar، وتعديل نطاق القص عبر xpd = TRUE، وتطبيق الإزاحة النسبية الدقيقة عبر المعلمة inset في دالة legend()، يمنح المبرمج حرية هندسية كاملة لتطويع المساحات البيضاء وتوزيع العناصر البصرية بأعلى درجات الدقة والجمال.

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

المراجع

  • Murrell, P. (2018). R Graphics (3rd ed.). Chapman and Hall/CRC. https://doi.org/10.1201/9780429490333
  • R Core Team. (2023). R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing, Vienna, Austria. https://www.R-project.org/
  • Wickham, H. (2016). ggplot2: Elegant Graphics for Data Analysis (2nd ed.). Springer-Verlag New York. https://doi.org/10.1007/978-3-319-24277-4
  • Cleveland, W. S. (1993). Visualizing Data. Hobart Press.
  • Tufte, E. R. (2001). The Visual Display of Quantitative Information (2nd ed.). Graphics Press.
  • Wilke, C. O. (2019). Fundamentals of Data Visualization: A Primer on Making Informative and Compelling Figures. O’Reilly Media. https://clauswilke.com/dataviz/

اقتباس هذا المقال

looti, M. (2026, سبتمبر 1). كيفية رسم وسيلة إيضاح خارج المخطط في R. عرب سايكلوجي. https://arabpsychology.com/statistics/how-to-draw-a-legend-outside-of-a-plot-in-r/
looti, Mohammed. “كيفية رسم وسيلة إيضاح خارج المخطط في R.” عرب سايكلوجي, 1 سبتمبر 2026, https://arabpsychology.com/statistics/how-to-draw-a-legend-outside-of-a-plot-in-r/.
looti, Mohammed. “كيفية رسم وسيلة إيضاح خارج المخطط في R.” عرب سايكلوجي. سبتمبر 1, 2026. https://arabpsychology.com/statistics/how-to-draw-a-legend-outside-of-a-plot-in-r/.