python - وضع النص في الزاوية العليا اليسرى من مؤامرة matplotlib




(2)

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

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

شكر!


أحد الحلول هو استخدام الدالة plt.legend ، حتى إذا كنت لا تريد وسيلة إيضاح حقيقية. يمكنك تحديد موضع مربع وسيلة الإيضاح باستخدام keyterm loc . يمكن العثور على مزيد من المعلومات على موقع الويب هذا ، ولكني قمت أيضًا بتضمين مثال يوضح كيفية وضع وسيلة إيضاح:

ax.scatter(xa,ya, marker='o', s=20, c="lightgreen", alpha=0.9)
ax.scatter(xb,yb, marker='o', s=20, c="dodgerblue", alpha=0.9)
ax.scatter(xc,yc marker='o', s=20, c="firebrick", alpha=1.0)
ax.scatter(xd,xd,xd, marker='o', s=20, c="goldenrod", alpha=0.9)
line1 = Line2D(range(10), range(10), marker='o', color="goldenrod")
line2 = Line2D(range(10), range(10), marker='o',color="firebrick")
line3 = Line2D(range(10), range(10), marker='o',color="lightgreen")
line4 = Line2D(range(10), range(10), marker='o',color="dodgerblue")
plt.legend((line1,line2,line3, line4),('line1','line2', 'line3', 'line4'),numpoints=1, loc=2) 

لاحظ أنه نظرًا لوجود loc=2 ، تكون وسيلة الإيضاح في الزاوية العلوية اليسرى من المخطط. وإذا تداخل النص مع المخطط ، فيمكنك جعله أصغر باستخدام legend.fontsize ، والذي سيؤدي بعد ذلك إلى جعل الأسطورة أصغر.


يمكنك استخدام text .

text(x, y, s, fontsize=12)

يمكن إعطاء إحداثيات text بالنسبة للمحور ، لذا فإن موضع النص سيكون مستقلاً عن حجم المؤامرة:

يحدد التحويل الافتراضي أن النص في coords البيانات ، بدلاً من ذلك ، يمكنك تحديد النص في coords المحور (0،0 أقل اليسار و 1،1 أعلى اليمين). المثال التالي يضع النص في وسط المحاور ::

text(0.5, 0.5,'matplotlib',
     horizontalalignment='center',
     verticalalignment='center',
     transform = ax.transAxes)

لمنع النص للتدخل في أي نقطة من مبعثر الخاص بك هو afaik أكثر صعوبة. أسهل طريقة هي ضبط y_axis (ymax in ylim((ymin,ymax)) ) ylim((ymin,ymax)) ) إلى قيمة أعلى قليلاً من إحداثيات y القصوى ylim((ymin,ymax)) . بهذه الطريقة ستحصل دائمًا على هذه المساحة المجانية للنص.

تحرير: هنا لديك مثال على ذلك:

In [18]: f = figure()
In [19]: ax = f.add_subplot(111)
In [20]: scatter([3,5,2,6,8],[5,3,2,1,5])
Out[20]: <matplotlib.collections.CircleCollection object at 0x0000000007439A90>
In [21]: text(0.1, 0.9,'matplotlib', ha='center', va='center', transform=ax.transAxes)
Out[21]: <matplotlib.text.Text object at 0x0000000007415B38>
In [22]:

تعيين المعلمات ha و va محاذاة النص الخاص بك نسبة إلى نقطة الإدراج. أي. ha = 'left' هي مجموعة جيدة لمنع النص الطويل من الخروج من المحور الأيسر عندما يتم تصغير الإطار (جعله أضيق) يدويًا.





matplotlib