Die Legende der Darstellung einer sekundären Achse ist irgendwie transparent für die Darstellung der anderen Achse. Ein minimales Beispiel, das Problem zu reproduzieren:Legende Transparenz, bei Verwendung der sekundären Achse
import matplotlib.pyplot as plt
ax1 = plt.subplot(111)
ax2 = ax1.twinx()
ax2.plot([1, 2, 3], [0.3, 0.2, 0.1], 'r')
ax1.plot([1, 2, 3], [1, 2, 3], 'b', label='ax1')
ax1.legend(loc=2)
plt.show()
Der Ausgang ich erhalte, ist:
Wie Sie die Legende für die blaue Handlung ist overdrawn durch das rote Grundstück sehen. Das Umordnen der Zeichnungsbefehle, das Ändern des Alpha-Werts oder das Ändern der Z-Ordnungen der Objekte hilft nicht.
Gibt es eine Möglichkeit, die Legende für alle Plots undurchsichtig zu machen?
EDIT: @tcaswell
: Während Ihre Antwort für eine einzelne Legende funktioniert, funktioniert es nicht, wenn beide Achsen eine separate Legende haben. Im folgenden Code habe ich ein Label für ax2
:
import matplotlib.pyplot as plt
plt.figure()
ax1 = plt.subplot(111)
ax2 = ax1.twinx()
ax2.plot([1, 2, 3], [0.3, 0.2, 0.1], 'r', label='ax2')
ax1.plot([1, 2, 3], [1, 2, 3], 'b', label='ax1')
ax1.legend(loc=2)
ax2.legend(loc=1)
ax1.set_zorder(1) # make it on top
ax1.set_frame_on(False) # make it transparent
ax2.set_frame_on(True) # make sure there is any background
plt.show()
mit folgendem Ergebnis:
Während Ihr allgemeineren Ansatz löst dieses Problem, indem Figure.legend
leider die Legende außerhalb der Orte Handlung. Sie explizit mit loc
zu plazieren ist etwas mühsam und funktioniert nicht gut beim Skalieren des Plots. Gibt es eine bessere Lösung?
Danke! Das hat schon sehr geholfen.Leider löst es mein Problem nicht vollständig, siehe meine Bearbeitung. – bzn
@bzn Ich glaube nicht, dass es eine bessere Lösung gibt, weil mpl die Bilder (Schicht für Schicht) rendert, nichts in den unteren Achsen kann von den oberen Achsen "über" sein. Sie sollten eine neue Frage zu besseren Möglichkeiten zum Platzieren der Figurenlegende öffnen. – tacaswell