Data Visualization

إتقان أساطير Matplotlib: إنشاء أسطورة موحدة لجميع الرسوم الفرعية

Spread the love

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

جدول المحتويات

فهم الرسوم الفرعية في Matplotlib

ترتب الرسوم الفرعية رسومات متعددة داخل رسم واحد. في Matplotlib، يمكنك إنشاؤها باستخدام matplotlib.pyplot.subplots()، والتي تُرجع كائن رسم ومصفوفة من كائنات المحاور (واحد لكل رسم فرعي).

import matplotlib.pyplot as plt

fig, axes = plt.subplots(2, 2)  # شبكة 2x2 من الرسوم الفرعية

# رسم البيانات على كل رسم فرعي
axes[0, 0].plot([1, 2, 3], [4, 5, 6], label='Line 1')
axes[0, 1].plot([1, 2, 3], [7, 8, 9], label='Line 2')
axes[1, 0].plot([1, 2, 3], [10, 11, 12], label='Line 1')
axes[1, 1].plot([1, 2, 3], [13, 14, 15], label='Line 2')

plt.show()

هذا ينشئ شبكة 2×2، كل منها لها أسطورتها الخاصة. سنقوم بدمج هذه في أسطورة واحدة.

الطريقة الأولى: استخدام fig.legend()

أبسط نهج يستخدم طريقة legend() لكائن الرسم. هذا يتطلب جمع جميع مقابض الأسطورة والعلامات.

import matplotlib.pyplot as plt

fig, axes = plt.subplots(2, 2)

lines1, = axes[0, 0].plot([1, 2, 3], [4, 5, 6], label='Line 1')
lines2, = axes[0, 1].plot([1, 2, 3], [7, 8, 9], label='Line 2')
lines3, = axes[1, 0].plot([1, 2, 3], [10, 11, 12], label='Line 1')
lines4, = axes[1, 1].plot([1, 2, 3], [13, 14, 15], label='Line 2')

# جمع المقابض والعلامات الفريدة
handles = [lines1, lines2] 
labels = [h.get_label() for h in handles]

fig.legend(handles, labels, loc='upper right')

plt.show()

ملاحظة: نحن نستخدم فقط مقابض فريدة لتجنب التكرار في الأسطورة. loc يحدد موضع الأسطورة.

الطريقة الثانية: تخصيص وضع الأسطورة ومظهرها

يمكنك تخصيص موقع الأسطورة، وحافتها، وحجم الخط، والمزيد.

import matplotlib.pyplot as plt

# ... (رمز الرسم من الطريقة الأولى) ...

fig.legend(handles, labels, loc='lower center', bbox_to_anchor=(0.5, -0.1), ncol=2, frameon=True, fontsize=12)

plt.show()

هنا، قمنا بوضع الأسطورة في المنتصف السفلي، وقمنا بضبط الموضع الرأسي باستخدام bbox_to_anchor، واستخدمنا عمودين (ncol=2)، وأضفنا حدودًا (frameon=True)، وزادنا حجم الخط.

الطريقة الثالثة: التعامل مع خطوط متعددة لكل رسم فرعي

بالنسبة للخطوط المتعددة داخل رسم فرعي، اجمع جميع المقابض والعلامات ذات الصلة.

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

line1, = ax.plot([1, 2, 3], [4, 5, 6], label='Line 1')
line2, = ax.plot([1, 2, 3], [7, 8, 9], label='Line 2')
line3, = ax.plot([1, 2, 3], [10, 11, 12], label='Line 3')

fig.legend([line1, line2, line3], [line1.get_label(), line2.get_label(), line3.get_label()], loc='best')
plt.show()

الخلاصة

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

الأسئلة الشائعة

  • س: ماذا لو كان لدي أنماط خطوط مختلفة؟ ج: ستعكس الأسطورة هذه الاختلافات تلقائيًا.
  • س: هل يمكنني استخدام ألوان مختلفة لنفس العلامة؟ ج: نعم، لكن الأسطورة ستعرض لونًا واحدًا لكل علامة فقط. استخدم علامات مميزة للتمييز.
  • س: تتداخل أسطورتي مع الرسومات. ج: اضبط bbox_to_anchor، loc، وحجم الخط، أو حجم الرسم.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *