TL; DR -> Comment créer une légende pour un graphe linéaire dans
Matplotlib
'sPyPlot
sans créer de variables supplémentaires?
Veuillez considérer le script graphique ci-dessous:
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()
Comme vous pouvez le constater, il s’agit d’une utilisation très basique de matplotlib
's PyPlot
. Ceci génère idéalement un graphique comme celui ci-dessous:
Rien de spécial, je sais. Cependant, il est difficile de savoir quelles données sont tracées où (j'essaie de tracer les données de certains algorithmes de tri, longueur par rapport au temps pris, et j'aimerais m'assurer que les gens sachent quelle ligne est laquelle). Donc, j'ai besoin d'une légende, cependant, en regardant l'exemple suivant ci-dessous ( du site officiel ):
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 à conserver la simplicité de mon script actuel?.
Ajoutez un label=
à chacun de vos plot()
, puis appelez legend(loc='upper left')
.
Considérez cet exemple:
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()
Légèrement modifié depuis ce tutoriel: http://jakevdp.github.io/mpl_tutorial/tutorial_pages/tut1.html
Vous pouvez accéder à l'instance Axes (ax
) avec plt.gca()
. Dans ce cas, vous pouvez utiliser
plt.gca().legend()
Vous pouvez le faire en utilisant le mot clé label=
dans chacun de vos appels plt.plot()
ou en affectant vos étiquettes sous forme de tuple ou de liste dans legend
, comme dans cet exemple de travail:
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()
Cependant, si vous devez accéder à l'instance Axes plusieurs fois, je vous recommande de l'enregistrer dans la variable ax
avec
ax = plt.gca()
puis en appelant ax
au lieu de plt.gca()
.
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()
Un tracé simple pour les courbes sinus et cosinus avec une légende.
Utilisé 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()
Ajoutez des étiquettes à chaque argument de votre appel de tracé correspondant à la série représentée, c.-à-d. label = "series 1"
Ajoutez simplement Pyplot.legend()
au bas de votre script et la légende affichera ces étiquettes.
Vous pouvez ajouter une légende personnalisée documentation
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()