Frage

Ich habe Schwierigkeiten, die Reihenfolge der Elemente eines Polardiagramms zu steuern, das einem kartesischen Diagramm überlagert ist.

Betrachten Sie dieses Beispiel:

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()

Das Ergebnis ist:enter image description here

Es sieht aus wie matplotlib ignorierte das zorder von Streudiagrammen.Ich würde erwarten, dass der rote Stern über dem blauen liegt.

Könnten Sie bitte erklären, was ich hier falsch mache?

ich fand eine Frage, was meinem ziemlich ähnlich ist, sich aber stattdessen auf Ticklines und Raster bezieht.Vielleicht ist es derselbe Fehler?

P.S.Ich verwende Linux x86_64 mit Python 2.7.6 und Matplotlib 1.3.1.

War es hilfreich?

Lösung

Das Problem besteht darin, dass Sie die Z-Reihenfolge der Markierungen auf verschiedenen Achsen festlegen ax Und ax2 aber seit ax2 hat eine größere Z-Reihenfolge, über der alle darin enthaltenen Diagramme liegen ax.Eine Lösung könnte darin bestehen, eine höhere Z-Reihenfolge festzulegen ax Dann müssen Sie aber den Hintergrund transparent machen oder festlegen frameon=False (und das ist in Ihrem Fall vielleicht nicht wünschenswert), dies ist eine Demonstration dessen, was ich sage:

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()

Handlung:

enter image description here

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top