matplotlib zorder من العناصر في مؤامرة قطبية متراكبة على مؤامرة ديكارتية
-
21-12-2019 - |
سؤال
أواجه صعوبة في التحكم في ترتيب عناصر المخطط القطبي المتراكب على المخطط الديكارتي.
خذ بعين الاعتبار هذا المثال:
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(1, 1, marker='*', s=2000, c='r', zorder=2)
ax2 = fig.add_axes(ax.get_position(), frameon=False, polar=True)
ax2.scatter(1., 0.1, marker='*', s=1000, c='b', zorder=1)
plt.xlim(0, 2)
plt.ylim(0, 2)
plt.show()
النتيجه هي:
يبدو الأمر كذلك matplotlib
تجاهلت zorder
من المؤامرات المتناثرة.أتوقع أن يكون النجم الأحمر فوق النجم الأزرق.
هل يمكن أن توضح ما أفعله خطأ هنا؟
وجدت سؤال واحد, ، وهو مشابه إلى حد ما لخطتي، ولكنه يتعلق بخطوط التجزئة والشبكات بدلاً من ذلك.ربما هو نفس الخطأ؟
ملاحظة.أنا أقوم بتشغيل Linux x86_64 مع Python 2.7.6 وmatplotlib 1.3.1.
المحلول
تكمن المشكلة في أنك تقوم بتعيين الترتيب z للعلامات على محاور مختلفة ax
و ax2
لكن منذ ax2
لديه ترتيب z أكبر وستكون جميع قطع الأرض الموجودة فيه في الأعلى ax
.قد يكون أحد الحلول هو تعيين ترتيب z أعلى لـ ax
ولكن بعد ذلك تحتاج إلى جعل الخلفية شفافة أو ثابتة frameon=False
(وربما هذا غير مرغوب فيه بالنسبة لحالتك)، وهذا دليل على ما أقول:
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(1, 1, marker='*', s=2000, c='r', zorder=2)
ax2 = fig.add_axes(ax.get_position(), frameon=False, polar=True)
ax2.scatter(1., 0.1, marker='*', s=1000, c='b', zorder=1)
ax.set_zorder(3)
ax.patch.set_facecolor('none')
#ax.patch.set_visible(False)
plt.xlim(0, 2)
plt.ylim(0, 2)
plt.show()
حبكة: