Hinzufügen einer Legende zu PyPlot in Matplotlib auf möglichst einfache Weise

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

Bitte betrachten Sie das folgende Skript:

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 einfache Anwendung von matplotlib's PyPlot. Dies erzeugt idealerweise einen Graphen wie den untenstehenden:

Nichts Besonderes, ich weiß. Es ist jedoch unklar, welche Daten wo gezeichnet werden (ich versuche, die Daten einiger Sortieralgorithmen, Länge gegen benötigte Zeit, zu zeichnen, und ich möchte sicherstellen, dass die Leute wissen, welche Linie welche ist). Daher benötige ich eine Legende, wie das folgende Beispiel zeigt (von der offiziellen Website):

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 derzeitigen Skripts beibehalten?

Lösung

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

Betrachten Sie dieses Beispiel (getestet mit Python 3.8.0):

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 20, 1000)
y1 = np.sin(x)
y2 = np.cos(x)

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

Leicht abgewandelt von diesem Tutorial: http://jakevdp.github.io/mpl_tutorial/tutorial_pages/tut1.html

Kommentare (5)

Hier ist ein Beispiel, das Ihnen helfen soll ...

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()

Kommentare (0)

Fügen Sie jedem Argument in Ihrem Diagrammaufruf Beschriftungen hinzu, die der darzustellenden Reihe entsprechen, d. h. label = "series 1"

Fügen Sie dann einfach Pyplot.legend() am Ende Ihres Skripts hinzu, und die Legende wird diese Beschriftungen anzeigen.

Kommentare (1)