Ajouter une légende à PyPlot en Matplotlib de la manière la plus simple possible

TL;DR -> Comment créer une légende pour un graphique linéaire dans Matplotlib's PyPlot sans créer de variables supplémentaires ?

Veuillez considérer le script de graphique ci-dessous :

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

Comme vous pouvez le voir, il s'agit d'une utilisation très basique de matplotlib's PyPlot. Idéalement, cela génère un graphique comme celui ci-dessous :

![Graph][1]

Rien de spécial, je sais. Cependant, il n&#8217est pas clair quelles données sont tracées à quel endroit (j&#8217essaie de tracer les données de certains algorithmes de tri, la longueur par rapport au temps pris, et je voudrais m&#8217assurer que les gens savent quelle ligne est quelle ligne). J'ai donc besoin d'une légende, mais si l'on regarde l'exemple suivant ([du site officiel][2]) :

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)

Vous verrez que je dois créer une variable supplémentaire ax. Comment puis-je ajouter une légende à mon graphique _sans avoir à créer cette variable supplémentaire et en conservant la simplicité de mon script actuel.

[1] : http://i.stack.imgur.com/sRcuY.png [2] : http://matplotlib.org/users/legend_guide.html

Solution

Ajoutez un label= à chacun de vos appels à plot(), puis appelez legend(loc='upper left&#39 ;).

Considérez cet exemple (testé avec 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()

[[entrer la description de l'image ici][1]][1] Légèrement modifié à partir de ce tutoriel : http://jakevdp.github.io/mpl_tutorial/tutorial_pages/tut1.html

[1] : https://i.stack.imgur.com/GyMXH.png

Commentaires (5)

Voici un exemple pour vous aider...

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

[!entrer la description de l'image ici][1]][1]

[1] : https://i.stack.imgur.com/jPnzz.png

Commentaires (0)

Ajoutez des étiquettes à chaque argument de votre appel de graphique correspondant à la série qu'il représente, par exemple label = "série 1".

Ensuite, ajoutez simplement Pyplot.legend() au bas de votre script et la légende affichera ces étiquettes.

Commentaires (1)