Ich kann die Legende meiner Matplotlib v. 2.0.2 Figur nicht in Python 2.7 erscheinen lassen. Ich habe unten ein minimales Beispiel, das Pfeile auf einer Achse in einer for-Schleife zeichnet.Matplotlib-Legende wird nicht angezeigt. Labels von ax.arrow(), die in der for-Schleife definiert sind. Python 2.7
Da die Zuweisung der Label-Schlüsselwortdefinition für jede Iteration nicht funktioniert hat, um die Legende anzuzeigen, versuche ich eine Bedingung zu verwenden, um die Beschriftung nur während der ersten Iteration festzulegen.
Der Versuch, die Argumente "bbox_to_anchor" und "loc" in ax.legend() zu verwenden, hatte keine Wirkung, daher lasse ich keine Legendenargumente aus.
Jeder hat irgendwelche Ideen, wie man eine Legende erscheinen lässt, die die "Arrow1" und "Arrow2" Etiketten mit roten bzw. schwarzen Pfeilmarkierungen neben den Etiketten zeigt?
minimal Beispiel:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.set_xlim(0, 11)
ax.set_ylim(0, 2)
kwargs1 ={'color':'r'}
kwargs2 ={'color':'black'}
for i in range(1, 11):
ax.arrow(i-0.2, 0, 0, i/10., width=0.1,
label='Arrow1' if i == 1 else None, **kwargs1)
ax.arrow(i+0.2, 0, 0, i/10., width=0.1,
label='Arrow2' if i == 1 else None, **kwargs2)
ax.legend()
Siehe Link zum Bild der Ausgabe Plot ohne Legende:
EDIT:
Es scheint das Label Definition Einstellung jeder Iteration ist in Ordnung. Hier ist eine Lösung, die Linienmarkierungen mit den richtigen Farben und Etiketten in einer Legende zeigt:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.set_xlim(0, 11)
ax.set_ylim(0, 2)
kwargs1 ={'color':'r' }
kwargs2 ={'color':'black'}
for i in range(1, 11):
Arrow1 = ax.arrow(i-0.2, 0, 0, i/10., width=0.1,
label='Arrow1', **kwargs1)
Arrow2 = ax.arrow(i+0.2, 0, 0, i/10., width=0.1,
label='Arrow2', **kwargs2)
ax.legend(handles=[Arrow1, Arrow2])
Bild von Plotausgabe mit Legende:
Ein weiterer Edit:
Für Aus Gründen, auf die ich nicht eingehen werde, erforderte die Komplexität meines eigentlichen Skripts (nicht das minimale Beispiel) einen unsichtbaren "Proxy Artist" zum Hinzufügen von Labels zur Legende. Dies wurde in dieser Dokumentation für nicht unterstützte Künstler vorgeschlagen, here
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
fig, ax = plt.subplots()
ax.set_xlim(0, 11)
ax.set_ylim(0, 2)
kwargs1 ={'color':'red' }
kwargs2 ={'color':'black'}
for i in range(1, 11):
ax.arrow(i-0.2, 0, 0, i/10., width=0.1, **kwargs1)
Arrow1 = Rectangle((0, 0), 1, 1, label='Arrow1', fc='red')
ax.arrow(i+0.2, 0, 0, i/10., width=0.1, **kwargs2)
Arrow2 = Rectangle((0, 0), 1, 1, label='Arrow2', fc='black')
ax.legend(handles=[Arrow1, Arrow2], loc='upper left')
Mischen von Griffen und Labels in Matplotlib-Gerüchen - wenn Sie einfach Arrow1 und Arrow2 benennen und ax.legend (loc = 'oben rechts') aufrufen, sollte es tun, was Sie erwarten. –