2017-12-28 8 views
0

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:

arrow plot

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:

arrow plot with legend

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') 
+0

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. –

Antwort

0

Ich glaube, Sie brauchen, um die ‚Etiketten‘ zu spezifizieren und ‚Griffe‘ Argumente der Legende() Befehl, es zu bekommen

https://matplotlib.org/users/legend_guide.html

zu zeigen
+0

Das funktioniert, danke! Ich werde meinen Beitrag bearbeiten, um Ihre Lösung widerzuspiegeln. – AF2k15

Verwandte Themen