webentwicklung-frage-antwort-db.com.de

Matplotlib-Legenden funktionieren nicht

Seit dem Upgrade von matplotlib erhalte ich folgende Fehlermeldung, wenn ich versuche, eine Legende zu erstellen:

/usr/lib/pymodules/python2.7/matplotlib/legend.py:610: UserWarning: Legend does not support [<matplotlib.lines.Line2D object at 0x3a30810>]
Use proxy artist instead.

http://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist

  warnings.warn("Legend does not support %s\nUse proxy artist instead.\n\nhttp://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist\n" % (str(orig_handle),))
/usr/lib/pymodules/python2.7/matplotlib/legend.py:610: UserWarning: Legend does not support [<matplotlib.lines.Line2D object at 0x3a30990>]
Use proxy artist instead.

http://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist

  warnings.warn("Legend does not support %s\nUse proxy artist instead.\n\nhttp://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist\n" % (str(orig_handle),))

Dies tritt sogar bei einem trivialen Skript auf:

import matplotlib.pyplot as plt

a = [1,2,3]
b = [4,5,6]
c = [7,8,9]

plot1 = plt.plot(a,b)
plot2 = plt.plot(a,c)

plt.legend([plot1,plot2],["plot 1", "plot 2"])
plt.show()

Ich habe den Link gefunden, auf den der Fehler mich bei der Diagnose der Fehlerursache hinweist.

69
Mike Vella

Sie sollten Kommas hinzufügen:

plot1, = plt.plot(a,b)
plot2, = plt.plot(a,c)

Der Grund, warum Sie die Kommas benötigen, ist, dass plt.plot () ein Tuple von Linienobjekten zurückgibt, unabhängig davon, wie viele tatsächlich mit dem Befehl erstellt werden. Ohne das Komma sind "plot1" und "plot2" Tupel anstelle von Linienobjekten, wodurch der spätere Aufruf von plt.legend () fehlschlägt. 

Das Komma entpackt die Ergebnisse implizit, sodass anstelle von Tuple "plot1" und "plot2" automatisch die ersten Objekte innerhalb des Tuples werden, d. H. Die eigentlich gewünschten Linienobjekte.

http://matplotlib.sourceforge.net/users/legend_guide.html#adjusting-the-order-of-legend-items

line, = plot (x, sin (x)) Wofür steht Komma?

131

Verwenden Sie handles AKA Proxy artists

import matplotlib.lines as mlines
import matplotlib.pyplot as plt

blue_line = mlines.Line2D([], [], color='blue', label='My Label')
reds_line = mlines.Line2D([], [], color='reds', label='My Othes')

plt.legend(handles=[blue_line, reds_line])

plt.show()
6
ppaulojr

Verwenden Sie das Schlüsselwort "label" wie folgt:

pyplot.plot(x, y, label='x vs. y')

und fügen Sie dann die Legende hinzu:

pyplot.legend()

Die Legende behält Linieneigenschaften wie Dicke, Farben usw. bei.

 enter image description here

3
Ytsen de Boer

beschriftung beim Zeichnen des Diagramms verwenden, dann kann nur u die Legende verwenden. Die Namen der X-Achsen und der Y-Achsen unterscheiden sich von den Legenden.

0
Java By Kiran