matplotlib Zorder von Elementen im Polarplot überlagert mit kartesischem Plot
-
21-12-2019 - |
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:
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.
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: