TL; DR -> Wie kann eine Legende für ein Liniendiagramm in
Matplotlib
'sPyPlot
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:
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?.
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()
Leicht modifiziert von diesem Tutorial: http://jakevdp.github.io/mpl_tutorial/tutorial_pages/tut1.html
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()
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.
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()
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()
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.
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()