Wie kann man eine Legende für ein Liniendiagramm in erstellen Matplotlib‘S PyPlot ohne zusätzliche Variablen zu erstellen?
Bitte beachten Sie das folgende Grafikskript:
if __name__ == '__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 können, ist dies eine sehr grundlegende Verwendung von matplotlib‘S PyPlot. Dies erzeugt idealerweise ein Diagramm wie das folgende:
Nichts Besonderes, ich weiß. Es ist jedoch unklar, welche Daten wo geplottet werden (ich versuche, die Daten einiger Sortieralgorithmen zu plotten, Länge gegen Zeitaufwand, und ich möchte sicherstellen, dass die Leute wissen, welche Zeile welche ist). Daher brauche ich jedoch eine Legende, wenn ich mir das folgende Beispiel unten anschaue (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 erstellen muss ax. Wie kann ich meinem Diagramm eine Legende hinzufügen? ohne Muss ich diese zusätzliche Variable erstellen und die Einfachheit meines aktuellen Skripts beibehalten?
Ich bin verwirrt von Ihrer Sorge, eine zusätzliche Variable zu erstellen. Sie müssen diese Objekte sowieso hinter den Kulissen erstellen.
– tacaswell
1. Oktober 2013 um 21:01 Uhr
@tcaswell Nun, lass mich versuchen, sie zu beruhigen. Ich möchte keine zusätzlichen Variablen erstellen, da dies das gesamte Skript komplexer macht. Ich versuche zu unterrichten dies an ein paar Studenten, und da sie es nicht benutzt haben matplotlib Früher wollte ich die Dinge so einfach wie möglich halten. Wenn Sie sich auch Robs Antwort ansehen, ist sie viel einfacher als das auf der Website gezeigte Beispiel. Ich hoffe das hilft.
– Spiele Brainiac
1. Oktober 2013 um 21:08 Uhr
Ich würde argumentieren, dass die Verwendung der Zustandsmaschinenschnittstelle es macht Schwerer auf lange Sicht zu verstehen, weil so vieles davon „magisch“ geschieht. Auch die Konvention ist zu verwenden import matplotlib.pyplot as plt anstatt PyPlot
Gibt es eine Möglichkeit, dies zu tun, wenn Sie die Beschriftungen zum Zeitpunkt des Plottens der Serie nicht kennen? Dh eine Möglichkeit, Etiketten zu einer Serie hinzuzufügen, nachdem sie bereits geplottet wurde? Oder vielleicht eine Möglichkeit, Platzhalterbeschriftungen zu ändern, bevor die Legende angezeigt wird?
– davidA
5. Juli 2017 um 3:42 Uhr
plt.legend(loc='upper left') funktioniert auch, wo plt aus import matplotlib.pyplot as plt.
– Matt Kleinsmith
20. Januar 2018 um 8:10 Uhr
Hinweis für andere: die plt.legend() Forderung braucht sein nachplt.plot(label="lab1")
– Mauriii
25. November 2019 um 20:18 Uhr
@davidA Ja, Sie können einfach eine Liste von Zeichenfolgen übergeben plt.legend: plt.legend(['First Label', 'Second Label'])
– Apollys unterstützt Monica
12. Dezember 2019 um 23:41 Uhr
Ich bin mir sicher, dass die aktuelle Dokumentation unter: matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.legend.html beantwortet dies auch, aber es ist so mühsam, diese Informationen von dort im Vergleich zu hier zu bekommen. Wir müssen Dokumentation neu denken. lolz
– Benutzer1953366
25. April 2020 um 4:18 Uhr
Cameronroytaylor
Sie können auf die Axes-Instanz zugreifen (ax) mit plt.gca(). In diesem Fall können Sie verwenden
plt.gca().legend()
Sie können dies entweder tun, indem Sie die verwenden label= Stichwort in jedem Ihrer plt.plot() Aufrufe oder indem Sie Ihre Labels als Tupel oder Liste darin zuweisen legendwie 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 mehr als einmal auf die Axes-Instanz zugreifen müssen, empfehle ich, sie in der Variablen zu speichern ax mit
ax = plt.gca()
und dann anrufen ax anstatt plt.gca().
Copy-Paste-Antwort, die kein Lesen erfordert, und mit einem Bild! Diese Antwort verdient mehr Anerkennung
– Gülzar
10. Juni 2019 um 13:59 Uhr
Hallo Cameron, ich habe versucht, Sie zu erreichen, und dies ist die beste Option, die ich gefunden habe … Sie sind der Autor eines sehr hilfreichen Tools, das ich häufig verwendet habe: web.media.mit.edu/~crtaylor/calculator.html Leider funktioniert es seit einiger Zeit nicht mehr. Bin ich es oder ist das Werkzeug kaputt. Wenn ja, können Sie es reparieren?
– Thomas Wilde
17. Dezember 2020 um 21:20 Uhr
Hoppla! Fest. Danke für die Nachricht! Ich hoffe, Sie haben etwas Nützliches über Axes-Instanzen gelernt 🙂
Ein einfaches Diagramm für Sinus- und Kosinuskurven 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 Plot-Aufruf Beschriftungen hinzu, die der Reihe entsprechen, die es grafisch darstellt, dh label = "series 1"
Dann einfach hinzufügen Pyplot.legend() an das Ende Ihres Skripts und die Legende zeigt diese Beschriftungen an.
14489200cookie-checkHinzufügen einer Matplotlib-Legendeyes
Ich bin verwirrt von Ihrer Sorge, eine zusätzliche Variable zu erstellen. Sie müssen diese Objekte sowieso hinter den Kulissen erstellen.
– tacaswell
1. Oktober 2013 um 21:01 Uhr
@tcaswell Nun, lass mich versuchen, sie zu beruhigen. Ich möchte keine zusätzlichen Variablen erstellen, da dies das gesamte Skript komplexer macht. Ich versuche zu unterrichten dies an ein paar Studenten, und da sie es nicht benutzt haben
matplotlib
Früher wollte ich die Dinge so einfach wie möglich halten. Wenn Sie sich auch Robs Antwort ansehen, ist sie viel einfacher als das auf der Website gezeigte Beispiel. Ich hoffe das hilft.– Spiele Brainiac
1. Oktober 2013 um 21:08 Uhr
Ich würde argumentieren, dass die Verwendung der Zustandsmaschinenschnittstelle es macht Schwerer auf lange Sicht zu verstehen, weil so vieles davon „magisch“ geschieht. Auch die Konvention ist zu verwenden
import matplotlib.pyplot as plt
anstattPyPlot
– tacaswell
1. Oktober 2013 um 21:55 Uhr