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:enter image description here

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.

Était-ce utile?

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:

enter image description here

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top