it-swarm.com.de

Hinzufügen einer Legende zu PyPlot in Matplotlib auf einfachste Weise

TL; DR -> Wie kann eine Legende für ein Liniendiagramm in Matplotlib 's PyPlot erstellt werden, ohne dass zusätzliche Variablen erstellt werden?

Bitte beachten Sie das folgende Grafikskript:

if __== '__main__':
    PyPlot.plot(total_lengths, sort_times_bubble, 'b-',
                total_lengths, sort_times_ins, 'r-',
                total_lengths, sort_times_merge_r, 'g+',
                total_lengths, sort_times_merge_i, 'p-', )
    PyPlot.title("Combined Statistics")
    PyPlot.xlabel("Length of list (number)")
    PyPlot.ylabel("Time taken (seconds)")
    PyPlot.show()

Wie Sie sehen, ist dies eine sehr grundlegende Verwendung von matplotlib 's PyPlot. Dies erzeugt im Idealfall eine Grafik wie die folgende:

Graph

Nichts besonderes, ich weiß. Es ist jedoch unklar, welche Daten wo gezeichnet werden (ich versuche, die Daten einiger Sortieralgorithmen in Abhängigkeit von der Zeit zu zeichnen, und ich möchte sicherstellen, dass die Leute wissen, welche Zeile welche ist). Daher brauche ich jedoch eine Legende, indem ich mir das folgende Beispiel ansehe ( von der offiziellen Seite ):

ax = subplot(1,1,1)
p1, = ax.plot([1,2,3], label="line 1")
p2, = ax.plot([3,2,1], label="line 2")
p3, = ax.plot([2,3,1], label="line 3")

handles, labels = ax.get_legend_handles_labels()

# reverse the order
ax.legend(handles[::-1], labels[::-1])

# or sort them by labels
import operator
hl = sorted(Zip(handles, labels),
            key=operator.itemgetter(1))
handles2, labels2 = Zip(*hl)

ax.legend(handles2, labels2)

Sie werden sehen, dass ich eine zusätzliche Variable ax erstellen muss. Wie kann ich meinem Diagramm eine Legende hinzufügen, ohne diese zusätzliche Variable erstellen zu müssen und die Einfachheit meines aktuellen Skripts beizubehalten?.

192
Games Brainiac

Fügen Sie jedem Ihrer plot() -Aufrufe einen label= hinzu und rufen Sie dann legend(loc='upper left') auf.

Betrachten Sie dieses Beispiel:

import numpy as np
import pylab 
x = np.linspace(0, 20, 1000)
y1 = np.sin(x)
y2 = np.cos(x)

pylab.plot(x, y1, '-b', label='sine')
pylab.plot(x, y2, '-r', label='cosine')
pylab.legend(loc='upper left')
pylab.ylim(-1.5, 2.0)
pylab.show()

enter image description here Leicht modifiziert von diesem Tutorial: http://jakevdp.github.io/mpl_tutorial/tutorial_pages/tut1.html

316
Robᵩ

Sie können mit plt.gca() auf die Axes-Instanz (ax) zugreifen. In diesem Fall können Sie verwenden

plt.gca().legend()

Sie können dies tun, indem Sie entweder das Schlüsselwort label= in jedem Ihrer plt.plot() -Aufrufe verwenden oder indem Sie Ihre Bezeichnungen als Tupel oder Liste in legend zuweisen, wie in diesem Arbeitsbeispiel:

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-0.75,1,100)
y0 = np.exp(2 + 3*x - 7*x**3)
y1 = 7-4*np.sin(4*x)
plt.plot(x,y0,x,y1)
plt.gca().legend(('y0','y1'))
plt.show()

pltGcaLegend

Wenn Sie jedoch mehrmals auf die Axes-Instanz zugreifen müssen, empfehle ich, sie in der Variablen ax mit zu speichern

ax = plt.gca()

und dann ax anstelle von plt.gca() aufrufen.

29

Hier ist ein Beispiel, um Ihnen zu helfen ...

fig = plt.figure(figsize=(10,5))
ax = fig.add_subplot(111)
ax.set_title('ADR vs Rating (CS:GO)')
ax.scatter(x=data[:,0],y=data[:,1],label='Data')
plt.plot(data[:,0], m*data[:,0] + b,color='red',label='Our Fitting 
Line')
ax.set_xlabel('ADR')
ax.set_ylabel('Rating')
ax.legend(loc='best')
plt.show()

enter image description here

11
Akash Kandpal

Ein einfaches Diagramm für Sinus- und Cosinuskurven mit einer Legende.

Gebraucht matplotlib.pyplot

import math
import matplotlib.pyplot as plt
x=[]
for i in range(-314,314):
    x.append(i/100)
ysin=[math.sin(i) for i in x]
ycos=[math.cos(i) for i in x]
plt.plot(x,ysin,label='sin(x)')  #specify label for the corresponding curve
plt.plot(x,ycos,label='cos(x)')
plt.xticks([-3.14,-1.57,0,1.57,3.14],['-$\pi$','-$\pi$/2',0,'$\pi$/2','$\pi$'])
plt.legend()
plt.show()

Sin and Cosine plots (click to view image)

9
sajalagrawal

Fügen Sie jedem Argument in Ihrem Plotaufruf Beschriftungen hinzu, die der grafisch dargestellten Reihe entsprechen, d. H. label = "series 1".

Fügen Sie dann einfach Pyplot.legend() am Ende Ihres Skripts hinzu, und die Legende zeigt diese Bezeichnungen an.

6
blaklaybul

Sie können eine benutzerdefinierte Legende hinzufügen Dokumentation

first = [1, 2, 4, 5, 4]
second = [3, 4, 2, 2, 3]
plt.plot(first,'g--', second, 'r--')
plt.legend(['First List','Second List'], loc='upper left')
plt.show()

enter image description here

1
Boris Yakubchik