مكتبة Matplotlib في بايثون مكتبة قوية لإنشاء التصور. ومع ذلك، عند العمل مع رسوم فرعية متعددة، قد يصبح إدارة الأساطير معقدًا. توفر هذه المقالة طرقًا فعالة لإنشاء أسطورة موحدة واحدة عبر جميع الرسوم الفرعية الخاصة بك.
جدول المحتويات
- فهم الرسوم الفرعية في Matplotlib
- الطريقة الأولى: استخدام
fig.legend()
- الطريقة الثانية: تخصيص وضع الأسطورة ومظهرها
- الطريقة الثالثة: التعامل مع خطوط متعددة لكل رسم فرعي
- الخلاصة
- الأسئلة الشائعة
فهم الرسوم الفرعية في 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
، وحجم الخط، أو حجم الرسم.