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

كيفية إنشاء مخطط دائري في Seaborn

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

تاريخ النشر

تُعد عملية تمثيل البيانات بصرياً (Data Visualization) أحد أهم أركان التحليل الإحصائي الاستكشافي وعلوم البيانات المعاصرة؛ إذ تسهم الرسوم البيانية في تحويل المصفوفات الرقمية المعقدة والأنماط الإحصائية المجرّدة إلى أشكال مرئية يسهل على العقل البشري استيعابها وتفسيرها واتخاذ القرارات المستندة إليها. وفي فضاء لغة البرمجة Python، تحتل مكتبة Seaborn مكانة فريدة كأداة متقدمة مبنية فوق مكتبة Matplotlib، مكرسة لتوليد رسوم إحصائية ذات جاذبية بصرية فائقة ومبنية على أسس تصميمية متينة تدعم التحليل العلمي والجمالي في آنٍ واحد.

ومع ذلك، يواجه الممارسون وعلماء البيانات في كثير من الأحيان تساؤلاً جوهرياً عندما يتعلق الأمر بإنشاء المخططات الدائرية (Pie Charts)؛ حيث يلاحظ المطورون غياب دالة مباشرة ومستقلة داخل مكتبة Seaborn تحمل اسم sns.pie(). هذا الغياب ليس مجرد سهو برمجياً، بل ينبع من فلسفة تصميمية وإحصائية صارمة تتبناها المكتبة لتوجيه المستخدمين نحو الممارسات البيانية الأكثر دقة، مع إتاحة المجال في الوقت ذاته للاستفادة القصوى من محرك الألوان ونظام السمات الجمالية الخاص بها عند دمجها مع أدوات الرسم الأساسية في Matplotlib.

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

1. مقدمة عامة حول المخططات الدائرية وفلسفة مكتبة Seaborn

1.1 مفهوم المخطط الدائري واستخداماته الإحصائية

يُعرَّف المخطط الدائري بأنه تمثيل بياني إحصائي دائري مقسم إلى قطاعات أو شرائح (Slices/Sectors)، حيث تتناسب المساحة السطحية وزاوية القوس المركزي لكل قطاع طردياً مع الكمية أو التكرار النسبي للفئة التي يمثلها من المجموع الكلي. يُستخدم هذا النوع من الرسوم بشكل أساسي لعرض العلاقات التناسبية وتوضيح مفهوم “الأجزاء من الكل” (Part-to-Whole Relationships)، مما يجعله خياراً شائعاً في التقارير الإدارية، والأعمال التجارية، والاستطلاعات العامة التي تتطلب إبراز الحصص السوقية أو التوزيع الديموغرافي بصورة مباشرة وموجزة.

تعتمد الملاءمة المنهجية للمخطط الدائري على طبيعة البيانات المرصودة؛ إذ يقتصر استخدامه الصحيح إحصائياً على البيانات الفئوية الاسمية (Nominal) أو الترتيبية (Ordinal) التي تحتوي على عدد محدود جداً من الفئات الحصرية والشاملة (Mutually Exclusive and Collectively Exhaustive). عندما يتجاوز عدد الفئات خمس إلى سبع فئات، يفقد المخطط كفاءته الإدراكية بسرعة، حيث يتعذر على العين البشرية التمييز الدقيق بين زوايا القطاعات المتقاربة في الحجم، مما يؤدي إلى تشويش في استيعاب التوزيع الإحصائي للبيانات المدروسة.

من الناحية الرياضية، يتم حساب الزاوية المركزية ($\theta_i$) لكل قطاع يمثل الفئة ($i$) من خلال ضرب التكرار النسبي لتلك الفئة في الدرجة الكلية للدائرة ($360^circ$). فإذا كان التكرار المطلق للفئة هو $x_i$ والمجموع الكلي للتكرارات هو $N = \sum_{j=1}^{k} x_j$، فإن قياس الزاوية يُحسب وفق المعادلة:

$$\theta_i = \left( \frac{x_i}{N} \right) \times 360^circ$$

كما تتطابق النسبة المئوية للمساحة السطحية للقطاع تماماً مع النسبة المئوية للتردد النسبي للفئة ($P_i = (x_i / N) \times 100%$). وتتجلى الأهمية الإحصائية لهذا التمثيل في توفير نظرة فورية حول مدى هيمنة فئة معينة أو تجانس التوزيع بين الفئات المختلفة ضمن الكل الإجمالي المكتمل بنسبة 100%.

1.2 طبيعة مكتبة Seaborn وغياب الدالة المباشرة للمخططات الدائرية

تم تأسيس مكتبة Seaborn بواسطة مايكل واسكوم (Michael Waskom) لتكون واجهة برمجية عالية المستوى مبنية على Matplotlib، وتستهدف تبسيط عملية استكشاف البيانات الإحصائية وتصور النماذج المعقدة. تعتمد فلسفة Seaborn الجوهرية على ربط هياكل البيانات التفاعلية مثل أطر بيانات Pandas بالدوال الرسومية مباشرة، مع التركيز على المقارنات التوزيعية المتقدمة عبر الرسوم الخطية، ومخططات الصندوق (Boxplots)، والخرائط الحرارية (Heatmaps)، والمخططات الشريطية (Barplots).

يرجع تجنب Seaborn تضمين دالة أصلية متخصصة في رسم المخططات الدائرية مثل sns.pie() إلى أسس علمية ونقدية في حقل التصور البياني وإدراك الرسوم (Graphical Perception). يشير علماء الإحصاء البصري، ومن أبرزهم إدوارد تفتي (Edward Tufte) ووليام كليفلاند (William Cleveland)، إلى أن العقل البشري يواجه صعوبة متأصلة في تقدير المساحات ثنائية الأبعاد ومقارنة الزوايا مقارنة بقدرته الفائقة على قياس ومقارنة الأطوال الخطية والمواضع المكانية على طول مقياس موحد. بناءً على هذه الرؤية الإحصائية، تشجع Seaborn الممارسين على تبني المخططات الشريطية لكونها أكثر كفاءة ودقة في نقل المعلومات الإحصائية، ولذلك لم تُخصص دالة منفردة للمخططات الدائرية.

على الرغم من هذا الموقف الفلسفي، تتيح البيئة البرمجية لبايثون تكاملاً ناعماً بين منظومتي Matplotlib وSeaborn. يمكن للمحلل استدعاء الدالة الأساسية plt.pie() من وحدة matplotlib.pyplot مع تغذيتها بالمحركات الجمالية، والأنماط البصرية، ولوحات الألوان المتقنة (Color Palettes) التي تنفرد بها Seaborn. هذا التكامل البيني يسمح بالاستفادة من دقة التحكم الهندسي المنخفض المستوى الذي توفره Matplotlib، مقترناً بالأناقة التصميمية وتناسق التدرجات اللونية المتقدمة التي تميز Seaborn، مما ينتج مخططات دائرية عالية الاحترافية والوضوح.

2. البنية البرمجية المشتركة: الربط التقني بين Matplotlib وSeaborn

2.1 استيراد الحزم البرمجية وإعداد بيئة التطوير

تتطلب عملية بناء المخططات الدائرية المهيأة بلمسات Seaborn إعداداً منهجياً لبيئة العمل البرمجية واستيراد المكتبات الأساسية المعنية بمعالجة البيانات وتمثيلها. يمثل استدعاء مكتبة matplotlib.pyplot حجر الأساس لكونها المسؤولة عن بناء الكائنات الرسومية (Figures) ومحاور الإحداثيات (Axes) وتنفيذ عملية التقطيع الهندسي للقطاعات الدائرية. بالتوازي مع ذلك، يتم استدعاء مكتبة seaborn للاستفادة من محرك الألوان ونظام التهيئة التلقائي للشاشات والخلفيات.

في بيئات التطوير التفاعلية المعتمدة على المفكرات الإلكترونية مثل Jupyter Notebook أو Google Colab، يُنصح بتفعيل أوامر التضمين التفاعلي لضمان عرض المخرجات الرسومية بدقة متناهية دون الحاجة إلى فتح نوافذ مستقلة. كما تتكامل هذه الأدوات بصورة طبيعية مع مكتبة pandas لإدارة وهيكلة الجداول الإحصائية، ومكتبة numpy لأداء العمليات الحسابية المتجهية السريعة عند معالجة التكرارات والنسب المئوية.

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

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
# ضبط السمات الجمالية الافتراضية للمخططات
sns.set_theme(style="whitegrid", font="sans-serif")
%matplotlib inline

2.2 آلية استخدام دالة plt.pie() بالتكامل مع sns.color_palette()

تتمحور التقنية البرمجية لإنشاء المخطط الدائري حول تفكيك الهيكل النحوي للأمر البرمجي plt.pie() وتزويده بالمدخلات المستخلصة من دوال Seaborn. تأخذ دالة plt.pie() كمدخل إلزامي أول مصفوفة القيم العددية أو التكرارات (x)، وتوفر سلسلة واسعة من المعاملات الاختيارية التي تتحكم في المسميات (labels)، ونسبة التباعد (explode)، وتنسيق النسب (autopct)، والخصائص الهندسية للقطاعات، بالإضافة إلى معامل الألوان (colors).

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

تُرجع دالة plt.pie() كائنات رسومية متعددة تتيح للمبرمج التحكم الدقيق في تفاصيل المخطط بعد إنشائه. تشمل هذه المخرجات قائمة بقطع ومساحات القطاعات (Wedges)، وقائمة بكائنات النصوص الخاصة بالمسميات الخارجية (Labels Texts)، وقائمة بكائنات النصوص الخاصة بالنسب المئوية المكتوبة داخل القطاعات (Autopct Texts). يتيح التعامل مع هذه الكائنات تخصيص خصائص الخطوط، وإضافة تأثيرات التعتيم، وتغيير التموضع الهندسي بدقة متناهية عبر الأكواد البرمجية التالية للدالة.

3. تجهيز البيانات ومعالجتها قبل التمثيل البياني

3.1 هيكلة البيانات الفئوية وتجميع التكرارات

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

عقب عملية التجميع، يتم استخلاص مصفوفتين أساسيتين: مصفوفة القيم العددية التي تمثل التكرارات المطلقة أو النسبية، ومصفوفة السلاسل النصية التي تمثل مسميات الفئات المقابلة. يجب التأكد من تطابق الأبعاد والترتيب بين هاتين المصفوفتين لضمان عدم حدوث إزاحة أو خطأ في إسناد القيم إلى تصنيفاتها الصحيحة. وتعد معالجة القيم المفقودة (Missing Values / NaN) في هذه المرحلة أمراً حرجاً؛ إذ ينبغي اتخاذ قرار منهجي إما باستبعادها وإعادة حساب النسب على أساس الحالات المكتملة، أو عزلها كفئة مستقلة تحمل اسم “غير محدد” إذا كان لغياب البيانات دلالة إحصائية تستوجب الإيضاح.

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

# مثال عملي على تجميع وترتيب البيانات الفئوية
raw_data = pd.Series(['هندسة', 'طب', 'هندسة', 'علوم', 'طب', 'هندسة', 'آداب', 'علوم', 'هندسة'])
frequency_table = raw_data.value_counts(ascending=False)
data_values = frequency_table.values
data_labels = frequency_table.index.tolist()

3.2 التعامل مع الفئات المتعددة ودمج الفئات الضئيلة

تُعد مشكلة “ازدحام القطاعات” (Slice Crowding) أحد أخطر العيوب التي تشوه المخططات الدائرية وتفقدها قيمتها الإيضاحية. عندما يحتوي المتغير الفئوي على أكثر من 6 أو 7 فئات، تتولد قطاعات ضئيلة المساحة وزوايا حادة للغاية، مما يسبب تداخلاً للنصوص البرمجية وتلاشياً للفروق البصرية بين الألوان. لتفادي هذا القصور المنهجي، يُلجأ إلى تقنية “الدمج الفئوي للذيول الإحصائية” (Tail Consolidation).

تتضمن استراتيجية الدمج تحديد حد أدنى للنسبة المئوية (Threshold)، مثل الفئات التي تشكل أقل من 3% أو 5% من الحجم الإجمالي، وتجميع كافة هذه التكرارات المحدودة ضمن فئة مركبة واحدة يُطلق عليها اسم “أخرى” (Other) أو “فئات متنوعة”. تضمن هذه التقنية الحفاظ على بساطة المخطط وإبراز الفئات الرئيسية الفاعلة دون إغفال شمولية البيانات الإجمالية بنسبة 100%.

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

def consolidate_small_categories(series, threshold_pct=0.04):
 counts = series.value_counts(normalize=True)
 mask = counts < threshold_pct
 if mask.sum() > 1:
 main_categories = counts[~mask]
 other_sum = counts[mask].sum()
 consolidated = pd.concat([main_categories, pd.Series({'أخرى': other_sum})])
 return consolidated
 return counts

4. بناء المخطط الدائري الأساسي: التطبيق خطوة بخطوة

4.1 صياغة الشيفرة البرمجية للمخطط البسيط

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

عند تنفيذ دالة plt.pie()، يتم تمرير قائمة التكرارات وقائمة المسميات مع تحديد معامل الألوان المستمد من Seaborn، مثل لوحة sns.color_palette('pastel'). بعد ذلك، يُستدعى الأمر plt.show() لعرض الشكل البياني وإغلاق كائن الرسم النشط، مما يحمي الذاكرة من تراكم الرسوم المتداخلة، وهو إجراء أساسي عند كتابة برمجيات معالجة البيانات الضخمة التي تنتج عشرات الأشكال آلياً.

# إعداد البيانات
categories = ['التعليم', 'الصحة', 'البنية التحتية', 'الدفاع', 'الخدمات العامة']
budget_shares = [25, 20, 30, 15, 10]
# اختيار لوحة ألوان من Seaborn
colors = sns.color_palette('pastel')[0:len(categories)]
# بناء الشكل الرسومي
plt.figure(figsize=(8, 8))
plt.pie(budget_shares, labels=categories, colors=colors, autopct='%.1f%%')
plt.title('توزيع الميزانية العامة التقديرية', fontsize=14, weight='bold')
plt.show()

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

4.2 ضبط التنسيق العام وخلفيات الرسوم

يتجاوز التنسيق الرسومي المتقدم مجرد تلوين القطاعات ليشمل بنية البيئة المحيطة بالمخطط الدائري بالكامل. يؤثر استدعاء الدالة sns.set_theme() على سمات الخطوط، وألوان النصوص، وهوامش الشكل الخارجي. عند العمل مع المخططات الدائرية، يُفضل عادةً تعيين النمط إلى style="white" لتجنب ظهور شبكات الإحداثيات الرمادية (Gridlines) خلف الدائرة، حيث صُممت تلك الشبكات للمحاور الكارتيزية ($X-Y$) وتسبب تشويشاً بصرياً لا لزوم له في الرسوم القطبية والدائرية.

تتحكم المعاملات الإضافية في كفاءة ودقة العرض التقديمي. يتيح ضبط معامل كثافة النقاط في البوصة (dpi) عبر الدالة plt.figure(figsize=(w, h), dpi=300) إنتاج صور فائقة النقاء صالحة للنشر والطباعة الورقية عالية الدقة دون تشوش في الحواف الدائرية أو تشويه في نصوص المسميات.

من المشكلات الهندسية الشائعة التي تواجه المطورين تحول المخطط الدائري إلى شكل بيضاوي (Ellipse) غير منتظم نتيجة لاختلاف نسبة العرض إلى الارتفاع في الشاشة أو الإطار المحدد. يتم التغلب على هذا التشوه الهندسي عبر تفعيل الأمر البرمجي plt.axis('equal')، الذي يُلزم مكتبة Matplotlib بتطبيق مقياس متساوي تماماً لكلا المحورين السيني والصادي، مما يضمن خروج المخطط في هيئة دائرة هندسية تامة الاستدارة وذات قياسات زاوية دقيقة.

5. دراسة متعمقة للوحات ألوان Seaborn وتطبيقاتها في المخططات

5.1 استخدام لوحات الألوان الفئوية والناعمة (Pastel & Muted)

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

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

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

# تطبيق لوحة الألوان الناعمة Muted
palette_muted = sns.color_palette('muted')
plt.figure(figsize=(7, 7), dpi=150)
plt.pie(budget_shares, labels=categories, colors=palette_muted, autopct='%1.1f%%')
plt.axis('equal')
plt.title('تمثيل البيانات باللوحة اللونية الهادئة (Muted)', fontsize=13)
plt.show()

5.2 تطبيق لوحات الألوان الزاهية والداكنة (Bright & Dark)

في السياقات البيانية التي تتطلب لفت انتباه المشاهد بشكل قاطع إلى تباينات جذرية في البيانات، مثل لوحات التحكم التفاعلية (Dashboards) والعروض التقديمية ذات الإيقاع السريع، تتفوق لوحات الألوان الزاهية والداكنة من Seaborn مثل bright و dark و deep.

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

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

5.3 لوحات الألوان المخصصة للأفراد المصابين بعمى الألوان (Colorblind)

تُمثل إتاحة البيانات للجميع (Data Accessibility) معياراً أخلاقياً وعلمياً صارماً في النشر الأكاديمي وتصميم المنتجات الرقمية الحديثة. يعاني ما يقارب 8% من الرجال و0.5% من النساء حول العالم من درجات متفاوتة من قصور رؤية الألوان (Color Vision Deficiency – CVD)، وخاصة عمى اللونين الأحمر والأخضر (Deuteranopia & Protanopia). يؤدي استخدام لوحات الألوان العشوائية في المخططات الدائرية إلى اندماج القطاعات المتجاورة واختفاء التمايز بينها تماماً لدى هذه الفئة من القراء.

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

تشترط العديد من المجلات العلمية المحكمة عالمياً (مثل مطبوعات IEEE وNature وElsevier) استخدام لوحات ألوان ملائمة للمصابين بعمى الألوان كشرط أساسي لقبول الأشكال البيانية التوضيحية للنشر. يتم تطبيق لوحة عمى الألوان في مخططات الدائرة البرمجية ببساطة متناهية عبر الشيفرة التالية:

# تطبيق لوحة الألوان المتاحة للجميع والمخصصة لعمى الألوان
palette_cb = sns.color_palette('colorblind', len(categories))
plt.figure(figsize=(7, 7))
plt.pie(budget_shares, labels=categories, colors=palette_cb, autopct='%1.1f%%', startangle=140)
plt.title('مخطط دائري متوافق مع معايير الإتاحة الشاملة (Colorblind-Safe)', fontsize=12)
plt.show()

6. تنسيق المسميات والنسب المئوية وعناصر القياس الرقمي

6.1 تخصيص تنسيق النسب المئوية باستخدام معيار autopct

يُعد المعامل autopct في دالة plt.pie() الأداة الأساسية لحساب وعرض النسب المئوية آلياً داخل قطاعات المخطط الدائري. يستقبل هذا المعامل إما صيغة نصية قياسية مبنية على تعبيرات التنسيق في لغة C (String Formatting)، أو دالة مخصصة تمنح المبرمج تحكماً ديناميكياً كاملاً في البيانات المعروضة داخل الشرائح.

عند استخدام الصيغ النصية، تُكتب التعبيرات مثل '%.1f%%' لعرض النسب مع تقريبها إلى منزلة عشرية واحدة، أو '%.2f%%' لتقريبها إلى منزلتين عشريتين، حيث يشير الحرف f إلى الأرقام الكسرية (Floating Point) بينما ترمز إشارة النسبة المزدوجة %% إلى طباعة الرمز المئوي الفعلي بجانب الرقم. يسمح المعامل pctdistance بالتحكم في المسافة القطرية الفاصلة بين مركز الدائرة وموقع كتابة النسبة المئوية؛ حيث تعني القيمة 0.5 وضع الأرقام في منتصف نصف القطر تماماً، بينما القيمة 0.8 تقربها من المحيط الخارجي.

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

def make_autopct_with_values(values):
 def my_autopct(pct):
 total = sum(values)
 val = int(round(pct * total / 100.0))
 # إرجاع النسبة المئوية متبوعة بالقيمة المطلقة بين قوسين
 return f'{pct:.1f}%n({val:,})'
 return my_autopct
plt.figure(figsize=(8, 8))
plt.pie(
 budget_shares, 
 labels=categories, 
 colors=sns.color_palette('pastel', len(categories)),
 autopct=make_autopct_with_values(budget_shares),
 pctdistance=0.75
)
plt.title('عرض النسب المئوية والقيم التكرارية المتزامنة', fontsize=13)
plt.show()

6.2 تنسيق الخطوط ومواضع المسميات الخارجية (Labels)

تخضع النصوص والمسميات المحيطة بالمخطط الدائري لمعايير تصميمية دقيقة لضمان وضوح القراءة واستقرار الهيكل العام للرسم. يتيح المعامل textprops تمرير قاموس بايثون (Dictionary) يتضمن كافة الخصائص الطباعية الموجهة لنصوص المسميات والنسب المئوية، مثل حجم الخط (fontsize)، ووزنه (weight)، ولونه (color)، ونوعه (family).

من الناحية المكانية، يتحكم المعامل labeldistance في موضع النصوص الخارجية بالنسبة لمحيط الدائرة. القيمة الافتراضية هي 1.1، وتعني تموضع النصوص خارج جسم الدائرة بمسافة تعادل 10% من طول نصف القطر. إذا تم تقليص هذه القيمة إلى ما دون الواحد الصحيح (مثل 0.7)، ستنتقل المسميات لتستقر داخل المساحات السطحية للقطاعات، وهو تنسيق ملائم في حال كانت الدائرة كبيرة والقطاعات متسعة.

عند إدراج النصوص المكتوبة باللغة العربية داخل المخططات، قد تواجه بيئات العمل مشكلات تتعلق باتجاه الكتابة من اليمين إلى اليسار (RTL) وانفصال الحروف المتصلة. للتغلب على هذا التحدي التقني في بايثون، تُستخدم حزم وسيطة مثل arabic_reshaper ومكتبة python-bidi لتصحيح اتجاه الحروف وإعادة تشكيلها بصرياً قبل تمريرها كمدخلات للدالة الرسومية، مما يضمن ظهور الكلمات العربية بتناسق هندسي متقن وسلس:

# معالجة النصوص العربية المتقدمة
import arabic_reshaper
from bidi.algorithm import get_display
arabic_labels = ['الهندسة', 'الطب البشري', 'تقنية المعلومات', 'العلوم الأساسية']
reshaped_labels = [get_display(arabic_reshaper.reshape(label)) for label in arabic_labels]
plt.figure(figsize=(7, 7))
plt.pie(
 [35, 25, 25, 15], 
 labels=reshaped_labels, 
 colors=sns.color_palette('Set2'),
 textprops={'fontsize': 12, 'family': 'DejaVu Sans', 'weight': 'medium'}
)
plt.show()

7. التقنيات الهندسية المتقدمة: الإبراز، الظلال وزوايا البداية

7.1 فصل القطاعات وإبرازها باستخدام خاصية explode

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

يتم تفعيل هذه الخاصية من خلال تمرير متسلسلة رقمية (Tuple or List) تتطابق في طولها تماماً مع عدد فئات المخطط. تُحدد القيم الرقمية داخل المتسلسلة مقدار الإزاحة الشعاعية لكل قطاع ككسر نسبي من نصف قطر الدائرة. فالقيمة 0.0 تبقي القطاع ملتصقاً بمركزه دون حركة، في حين أن القيمة 0.1 تُزيحه نحو الخارج بنسبة 10% من طول نصف القطر.

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

# تطبيق خاصية explode لإبراز الفئة الأكبر فقط
values = [45, 25, 15, 15]
labels = ['الفئة المتصدرة A', 'الفئة B', 'الفئة C', 'الفئة D']
# فصل الشريحة الأولى فقط بمقدار 0.08
explode_matrix = (0.08, 0, 0, 0)
plt.figure(figsize=(7, 7))
plt.pie(
 values, 
 labels=labels, 
 explode=explode_matrix, 
 colors=sns.color_palette('tab10'),
 autopct='%1.1f%%',
 shadow=False
)
plt.title('إبراز القطاع المهيمن عبر الإزاحة الشعاعية الموجهة', fontsize=12)
plt.show()

7.2 التحكم في زاوية البدء والاتجاه والظلال (startangle & shadow)

تبدأ دالة الرسم plt.pie() هندسياً بتوزيع القطاعات افتراضياً بزاوية صفرية ($0^circ$) على طول المحور السيني الأفقي الموجب متجهة بعكس اتجاه عقارب الساعة. ومع ذلك، تشير معايير التصميم البياني الاحترافي إلى أن وضع حافة القطاع الأول والأكبر رأسياً عند موضع الساعة الثانية عشرة ($90^circ$) يعزز من سلاسة القراءة؛ إذ تميل العين البشرية إلى تفحص الرسوم الدائرية من القمة الرأسية تماماً كما تفعل عند قراءة عقارب الساعة.

يتحكم المعامل startangle في تدوير المخطط بالكامل بالدرجات لتحديد نقطة انطلاق القطاع الأول، حيث يؤدي تعيين startangle=90 أو startangle=140 إلى موازنة التوزيع البصري العام. كما يتحكم المعامل المنطقي counterclock في اتجاه تتابع الشرائح؛ حيث يؤدي تعيينه إلى counterclock=False إلى إجبار التوزيع على المضي مع اتجاه عقارب الساعة، وهو المسار الأكثر انسجاماً مع التوقعات المعرفية لمعظم القراء.

يوفر المعامل المنطقي shadow=True إمكانية إسقاط ظل ناعم خلف القطاعات الدائرية المفصولة لإضفاء عمق مجسم ثلاثي الأبعاد بشكل مبسط. وعلى الرغم من أن الظلال تزيد من الجاذبية التسويقية في العروض غير الرسمية، إلا أن الأعراف الأكاديمية والبحثية تفضل تجنبها (shadow=False) للحفاظ على التسطيح الهندسي النقي ومنع التشويش على القياس الدقيق للمساحات. وتتيح خاصية wedgeprops تخصيص حواف القطاعات بدقة متناهية عبر تحديد سمك الإطار الخارجي (linewidth) ولون الحدود الفاصلة (edgecolor) لمنح الرسم تبايناً ناصعاً ومحدد المعالم.

8. تصميم المخطط الدائري المجوف (Donut Chart) بلمسات Seaborn

8.1 المفهوم الهندسي للمخطط المجوف ومزاياه البصرية

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

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

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

8.2 آلية التنفيذ البرمجي لإنشاء Donut Chart

توجد طريقتان برمجيتان رئيسيتان لبناء المخطط المجوف في بايثون بالتكامل بين Matplotlib وSeaborn. تتمثل الطريقة الحديثة والمباشرة في استغلال المعامل wedgeprops داخل الدالة plt.pie() مباشرة وتمرير قاموس يحدد عرض الحلقة عبر الخاصية 'width'. على سبيل المثال، يؤدي تعيين wedgeprops={'width': 0.4} إلى جعل سمك الحلقة الدائرية الخارجية يعادل 40% من نصف القطر الإجمالي، مما يترك تجويفاً مركزياً تلقائياً يمثل 60% من نصف القطر.

أما الطريقة التقليدية الأكثر مرونة، فتعتمد على رسم مخطط دائري مصمت اعتيادي، ثم إنشاء كائن دائري أبيض ناصع باستخدام الكلاس plt.Circle((0,0), radius=0.7, fc='white') وإضافته إلى المحاور النشطة عبر plt.gca().add_artist()، مما يحجب المركز المصمت ويحوله إلى فضاء أبيض نقي. بعد ذلك، يتم استخدام الأمر plt.text() لإدراج المؤشر الإحصائي أو الرقم الإجمالي في المركز بمحاذاة رأسية وأفقية متمركزة بدقة (ha='center', va='center').

# بناء مخطط مجوف متطور (Donut Chart) مع نص مركزي
labels = ['مشاريع مكتملة', 'مشاريع قيد التنفيذ', 'مشاريع متأخرة', 'مشاريع ملغاة']
sizes = [420, 280, 95, 45]
total_projects = sum(sizes)
# استدعاء لوحة Seaborn الهادئة
colors = sns.color_palette('Set3', len(labels))
fig, ax = plt.subplots(figsize=(8, 8))
# رسم القطاعات مع تحديد عرض الحلقة
wedges, texts, autotexts = ax.pie(
 sizes, 
 labels=labels, 
 colors=colors, 
 autopct='%1.1f%%',
 pctdistance=0.82,
 startangle=90,
 wedgeprops={'width': 0.35, 'edgecolor': 'white', 'linewidth': 2}
)
# تخصيص خطوط النسب
for text in autotexts:
 text.set_fontsize(10)
 text.set_weight('bold')
# إضافة نص إحصائي مركزي
ax.text(0, 0, f'إجمالي المشاريعn{total_projects:,}', ha='center', va='center', fontsize=14, weight='bold', color='#333333')
plt.title('الموقف التنفيذي للمحفظة الاستثمارية السنوية', fontsize=14, pad=20, weight='bold')
plt.axis('equal')
plt.show()

9. إضافة مفاتيح الرسم والعناوين التوضيحية الأكاديمية

9.1 بناء مفتاح الرسم (Legend) وضبط تموضعه بدقة

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

تُستخدم الدالة plt.legend() لإنشاء هذا المفتاح، مع ربطه بالكائنات الهندسية الناتجة من دالة الرسم. يتحكم المعامل المعقد bbox_to_anchor في تثبيت الإحداثيات المكانية الدقيقة للمفتاح بالنسبة للإطار العام للرسم؛ حيث يتم تمرير زوج إحداثي مثل bbox_to_anchor=(1, 0, 0.5, 1) لترحيل المفتاح تماماً إلى الجانب الأيمن من الدائرة ومنعه من حجب أي جزء من المخطط أو التداخل معه.

يوفر تخصيص مفتاح الرسم مرونة فائقة؛ إذ يمكن التحكم في عدد الأعمدة عبر المعامل ncol لعرض المفاتيح في نسق أفقي أسفل المخطط، وضبط لون خلفية الإطار (facecolor)، وتعيين عنوان فرعي وصفي للمفتاح نفسه عبر title='التصنيف القطاعي'. يضمن هذا التنسيق المتكامل استجابة المخطط للمعايير التصميمية العالمية في واجهات ذكاء الأعمال والمنشورات الإحصائية المحكمة.

# نموذج متكامل لضبط مفتاح الرسم الخارجي
plt.figure(figsize=(9, 6))
wedges, _, autotexts = plt.pie(
 sizes, 
 colors=sns.color_palette('pastel', len(labels)),
 autopct='%1.1f%%',
 startangle=120,
 pctdistance=0.65,
 wedgeprops={'edgecolor': 'white', 'linewidth': 1.5}
)
plt.legend(
 wedges, 
 labels,
 title="حالة المشاريع",
 loc="center left",
 bbox_to_anchor=(1, 0, 0.5, 1),
 fontsize=11,
 title_fontsize=12,
 frameon=True,
 shadow=True
)
plt.title('مخطط توزيع العمليات مع مفتاح بيانات جانبي منفصل', fontsize=13, weight='bold')
plt.tight_layout()
plt.show()

9.2 صياغة العناوين الرئيسية والهوامش الإيضاحية

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

تُستخدم الدالة plt.title() لتعيين العنوان مع تزويدها بمعامل التباعد الرأسي pad (مثل pad=25) لرفع العنوان لأعلى ومنعه من ملامسة القمة المنحنية للدائرة. ينبغي أن تتوافق ألوان الخطوط وأوزانها مع نسق الألوان المعتمد من Seaborn؛ حيث يُفضل استخدام درجات الرمادي الداكن أو الأسود الكربوني لتقليل التباين العنيف ومنح النص وقاراً أكاديمياً.

من الناحية المنهجية، يُلزم دليل النشر الأكاديمي الصادر عن جمعية علم النفس الأمريكية (APA Style) وغيرها من الهيئات العلمية بإدراج هوامش سفلية توثق مصادر البيانات، وحجم العينة ($N$)، وأي تعديلات إحصائية أُجريت (مثل دمج الفئات الصغيرة). يتم تنفيذ هذه الهوامش برمجياً في Matplotlib عبر الدالة plt.figtext() التي تتيح كتابة نصوص توثيقية في أسفل الإطار الخارجي بإحداثيات نسبية تبدأ من الركن السفلي الأيسر للشكل البياني، مما يرفع من الموثوقية العلمية للتقرير النهائي.

10. الأبعاد الإدراكية والنفسية لعرض البيانات عبر المخططات الدائرية

10.1 نقد علم النفس المعرفي لتمثيل المساحات والزوايا

خضعت المخططات الدائرية لدراسات تجريبية ونفسية مكثفة في حقل علم النفس المعرفي (Cognitive Psychology) ونظرية الجشطالت (Gestalt Psychology) للإدراك البصري بهدف تقييم كفاءتها في نقل المعلومات المعقدة. تتمحور النتيجة الأساسية لهذه الأبحاث حول مفهوم “التحيز الإدراكي للمساحات والزوايا”؛ حيث أثبتت التجارب أن النظام البصري البشري يميل بشكل منهجي إلى التقليل من شأن تقدير الزوايا المنفرجة ($> 90^circ$) وتضخيم الزوايا الحادة ($< 30^circ$) عند مقارنتها بالعين المجردة.

وفقاً لقانون ستيفنز للقوة الإدراكية (Stevens’ Power Law)، فإن إدراك الإنسان للمساحات ثنائية الأبعاد يتناسب مع المساحة الفعلية مرفوعة لأس يتراوح بين 0.7 إلى 0.8، مما يعني حدوث تشوه تدريجي في تقدير الفروق الحجمية كلما كبرت مساحة القطاع الدائري. في المقابل، يمتلك الإدراك البشري دقة شبه تامة (أس يقارب 1.0) عند مقارنة الأطوال الخطية أحادية البعد (Length Judgments)، وهو ما يفسر التفوق المنهجي للمخططات الشريطية عند الرغبة في تمكين القارئ من استنباط الفروق الرقمية الدقيقة بين الفئات المتقاربة.

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

10.2 السيميائية اللونية ولوحات Seaborn وتأثيرها على القارئ

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

تكمن عبقرية لوحات الألوان في مكتبة Seaborn في معالجتها لهذه التحيزات السيكولوجية عبر توفير لوحات موحدة التوازن الإشعاعي (Perceptually Uniform Palettes). في هذه اللوحات، تتساوى الدرجات اللونية في السطوع الظاهري والجاذبية الإدراكية، مما يمنع التفضيل غير المقصود لأي قطاع بياني ويحفظ النزاهة الموضوعية للبيانات؛ فلا يتم لفت انتباه القارئ لفئة هامشية لمجرد أنها صُبغت باللون الأصفر الفاقع على حساب قطاع استراتيجي صُبغ باللون الأزرق الداكن.

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

11. الأخطاء البرمجية والإحصائية الشائعة وكيفية تصحيحها

11.1 المشكلات البرمجية في تناغم Matplotlib وSeaborn

يواجه المطورون أثناء الربط البرمجي بين Matplotlib وSeaborn مجموعة من الأخطاء التقنية المتكررة التي قد تؤدي إلى توقف الكود البرمجي أو خروج المخطط بصورة مشوهة. من أبرز هذه المشكلات خطأ “عدم تطابق أبعاد لوحة الألوان” (Palette Length Mismatch). يحدث هذا الخطأ عندما يتم استدعاء لوحة ألوان من Seaborn تحتوي على عدد ألوان أقل من عدد الفئات الفعلية في البيانات، مما يؤدي إلى تكرار غير متناسق للألوان أو ظهور أخطاء استثناء برمجية. يتم حل هذه المعضلة بتمرير طول مصفوفة البيانات صراحة إلى دالة الألوان:

# الحل البرمجي لضمان توافق طول لوحة الألوان
num_categories = len(budget_shares)
safe_colors = sns.color_palette('tab20', n_colors=num_categories)

تتمثل المشكلة البرمجية الثانية في تداخل نصوص النسب المئوية والمسميات (Text Overlapping) عند وجود قطاعات صغيرة متجاورة. يتم التغلب على هذا التشابك النصي من خلال زيادة أبعاد الشكل figsize، أو ترحيل النصوص للخارج وضبط المسافات عبر pctdistance و labeldistance، أو كتابة روتين برمجي يلغي طباعة النسب للقطاعات التي تقل عن نسبة مئوية معينة (مثل 2%).

كذلك، فإن استدعاء الدوال العامة لتعديل السمات مثل sns.set_theme() بعد إنشاء كائنات الرسم قد يمحو الإعدادات المخصصة للخطوط والمحاور التي تم تعيينها سابقاً في Matplotlib. لذا، يُعد الترتيب المنطقي للشيفرة البرمجية قاعدة ذهبية: يجب دائماً ضبط سمات Seaborn العامة في بداية الملف البرمجي، ثم الانتقال بعدها لتعريف الأشكال وتخصيص تفاصيل المخطط.

11.2 المحاذير المنهجية في استخدام المخططات الدائرية

إلى جانب الأخطاء البرمجية، تقع العديد من التقارير في أخطاء منهجية وإحصائية جسيمة عند توظيف المخططات الدائرية. الخطيئة الكبرى في هذا السياق هي استخدام المخطط الدائري لتمثيل بيانات لا يُشكل مجموعها 100% من الكل الشامل. على سبيل المثال، في استطلاعات الرأي التي تتيح “تعدد الخيارات” للمستجيبين (Multiple-choice Surveys)، قد يصل مجموع النسب إلى 160%، ويمثل صب هذه البيانات داخل دائرة مغلقة تزويراً إحصائياً صريحاً وتشويهاً لمعنى النسب والأجزاء.

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

أخيراً، يُعد اللجوء إلى المخططات الدائرية المجسمة ثلاثية الأبعاد (3D Pie Charts) أسوأ الممارسات البيانية على الإطلاق؛ إذ تُحدث زاوية الميل المنظورية تشوهاً هندسياً فادحاً يجعل القطاعات القريبة من مقدمة الشاشة تبدو أكبر بكثير من مساحتها الحقيقية مقارنة بالقطاعات الخلفية ذات المساحة المطابقة. ترفض مكتبة Seaborn ومجتمع الإحصاء العلمي هذا النمط تماماً، مع التأكيد المستمر على الالتزام بالتصاميم المسطحة ثنائية الأبعاد (2D Flat Design) لضمان الأمانة والنزاهة الإحصائية.

12. البدائل الإحصائية المتقدمة وأفضل الممارسات البرمجية

12.1 البدائل المتاحة في Seaborn للبيانات الفئوية (Barplot & Countplot)

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

يعتمد المخطط الشريطي على تحويل الترددات والنسب إلى أطوال مستقيمة تمتد على طول محور ديكارتي ثابت، مما يتيح للعين البشرية رصد الفروق الطفيفة التي قد لا تتجاوز 1% بدقة وسرعة متناهية. علاوة على ذلك، تسمح المخططات الشريطية في Seaborn بإدراج فترات الثقة (Confidence Intervals) وأشرطة الخطأ الإحصائي (Error Bars)، وهو ما يستحيل تمثيله برمجياً أو هندسياً داخل المخططات الدائرية.

ومع ذلك، يظل المخطط الدائري محتفظاً بتفوقه الوظيفي في حالات استخدام محددة ونادرة: عندما يكون الهدف الأساسي هو المقارنة المباشرة والفورية لنسبة جزء وحيد طاغٍ من الكل (مثل معرفة هل تجاوزت فئة معينة حاجز 50% أو 75% من المجموع الكلي)، حيث توفر الدائرة معياراً مرجعياً مغلقاً ومكتمل الأركان يستوعبه العقل البشري بشكل بديهي وسريع.

# البديل المنهجي الأفضل في Seaborn: المخطط الشريطي الأفقي
df_sorted = pd.DataFrame({'الفئة': categories, 'النسبة': budget_shares}).sort_values('النسبة', ascending=False)
plt.figure(figsize=(9, 4.5))
sns.barplot(x='النسبة', y='الفئة', data=df_sorted, palette='Blues_r')
plt.title('البديل المنهجي الأكثر دقة: مخطط شريطي فئوي في Seaborn', fontsize=12)
plt.xlabel('النسبة المئوية (%)')
plt.ylabel('الفئات')
plt.show()

12.2 دليل أفضل الممارسات البرمجية والتوثيق النهائي للأكواد

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

عند حفظ وتصدير المخططات النهائية للنشر العلمي، يجب تجنب الصيغ النقطية المضغوطة ذات الجودة المنخفضة مثل JPG، وتفضيل التصدير بتنسيقات المتجهات الرسومية القابلة للتكبير اللانهائي دون أي فقدان في الجودة مثل PDF أو SVG، أو استخدام صيغة PNG عالية النقاء بدقة لا تقل عن 300 DPI عبر الأمر plt.savefig('figure.svg', format='svg', bbox_inches='tight') مع تفعيل معامل الإحاطة المشدودة لقص الحواف البيضاء الفارغة الزائدة.

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

def generate_professional_pie_chart(labels, values, title, export_path=None):
 """
 دالة معيارية لإنشاء مخطط دائري احترافي بتكامل Seaborn و Matplotlib
 """
 # تهيئة بيئة التصميم
 sns.set_theme(style="white", font="sans-serif")
 
 # فرز البيانات تنازلياً
 data = pd.Series(values, index=labels).sort_values(ascending=False)
 
 # اختيار لوحة ألوان متاحة للجميع
 colors = sns.color_palette("colorblind", n_colors=len(data))
 
 # إعداد الإطار الرسومي بدقة فائقة
 fig, ax = plt.subplots(figsize=(8, 8), dpi=300)
 
 # رسم القطاعات الدائرية
 wedges, texts, autotexts = ax.pie(
 data.values,
 labels=data.index,
 colors=colors,
 autopct='%1.1f%%',
 startangle=90,
 pctdistance=0.75,
 counterclock=False,
 wedgeprops={'edgecolor': 'white', 'linewidth': 2, 'antialiased': True},
 textprops={'fontsize': 11, 'weight': 'normal'}
 )
 
 # تنسيق خطوط النسب الداخلية
 for autotext in autotexts:
 autotext.set_color('white')
 autotext.set_weight('bold')
 autotext.set_fontsize(10)
 
 # ضبط تماثل المحاور
 ax.axis('equal')
 
 # إضافة العنوان والتوثيق
 plt.title(title, fontsize=14, pad=20, weight='bold', color='#222222')
 plt.figtext(0.1, 0.05, 'المصدر: تحليل بيانات الحسابات الإحصائية الرسمية (N=100%)', fontsize=9, color='#666666')
 
 # الحفظ والتصدير إن لزم
 if export_path:
 plt.savefig(export_path, bbox_inches='tight', dpi=300)
 
 plt.show()
# تشغيل الدالة
generate_professional_pie_chart(categories, budget_shares, 'التوزيع الهيكلي الشامل للميزانية التقديرية')

الخاتمة

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

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

المراجع (References)

  • Cleveland, W. S., & McGill, R. (1984). Graphical perception: Theory, experimentation, and application to the development of graphical methods. Journal of the American Statistical Association, 79(387), 531–554. https://doi.org/10.1080/01621459.1984.10478080
  • Hunter, J. D. (2007). Matplotlib: A 2D graphics environment. Computing in Science & Engineering, 9(3), 90–95. https://doi.org/10.1109/MCSE.2007.55
  • Spence, I. (2005). No humble pie: The origins and usage of a statistical chart. Journal of Educational and Behavioral Statistics, 30(4), 353–368. https://doi.org/10.3102/10769986030004353
  • Tufte, E. R. (2001). The visual display of quantitative information (2nd ed.). Graphics Press.
  • Waskom, M. L. (2021). Seaborn: statistical data visualization. Journal of Open Source Software, 6(60), 3021. https://doi.org/10.21105/joss.03021
  • Wilke, C. O. (2019). Fundamentals of data visualization: A primer on making informative and compelling figures. O’Reilly Media.

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

looti, M. (2026, أغسطس 29). كيفية إنشاء مخطط دائري في Seaborn. عرب سايكلوجي. https://arabpsychology.com/statistics/how-to-create-pie-chart-seaborn/
looti, Mohammed. “كيفية إنشاء مخطط دائري في Seaborn.” عرب سايكلوجي, 29 أغسطس 2026, https://arabpsychology.com/statistics/how-to-create-pie-chart-seaborn/.
looti, Mohammed. “كيفية إنشاء مخطط دائري في Seaborn.” عرب سايكلوجي. أغسطس 29, 2026. https://arabpsychology.com/statistics/how-to-create-pie-chart-seaborn/.