matplotlib zorder des éléments dans le tracé polaire superposé au tracé cartésien
-
21-12-2019 - |
Question
J'ai du mal à contrôler le zonage des éléments d'un tracé polaire superposé à un tracé cartésien.
Considérez cet exemple :
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()
Le résultat est:
On dirait matplotlib
ignoré le zorder
de nuages de points.Je m'attendrais à ce que l'étoile rouge soit au-dessus de l'étoile bleue.
Pourriez-vous s'il vous plaît expliquer ce que je fais de mal ici ?
j'ai trouvé une question, qui est un peu similaire au mien, mais concerne plutôt les ticklines et les grilles.C'est peut-être le même bug ?
P.S.J'utilise Linux x86_64 avec Python 2.7.6 et matplotlib 1.3.1.
La solution
Le problème est que vous définissez l'ordre z des marques sur différents axes ax
et ax2
mais depuis ax2
a un ordre z plus grand, toutes les parcelles qu'il contient seront au-dessus de ax
.Une solution pourrait être de définir un ordre z plus élevé pour ax
mais vous devez ensuite rendre l'arrière-plan transparent ou définir frameon=False
(et ce n'est peut-être pas souhaitable dans votre cas), ceci est une démonstration de ce que je dis :
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()
Parcelle: