TL;DR ->Hoe kan men een legenda maken voor een lijngrafiek in
Matplotlib
'sPyPlot
zonder extra variabelen aan te maken?
Beschouw het onderstaande grafiekscript:
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()
Zoals u kunt zien, is dit een zeer eenvoudig gebruik van matplotlib
's PyPlot
. Dit genereert idealiter een grafiek zoals hieronder:
Niets bijzonders, ik weet het. Het is echter onduidelijk welke gegevens waar worden uitgezet (ik'probeer de gegevens van enkele sorteeralgoritmen uit te zetten, lengte tegen de tijd die nodig is, en ik'wil er zeker van zijn dat de mensen weten welke lijn welke is). Ik heb dus een legende nodig, maar kijk eens naar het volgende voorbeeld hieronder(van de officiële site):
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)
U zult zien dat ik een extra variabele ax
moet aanmaken. Hoe kan ik een legende toevoegen aan mijn grafiek zonder deze extra variabele te moeten aanmaken en de eenvoud van mijn huidige script te behouden.
Voeg een label=
toe aan elk van je plot()
aanroepen, en roep dan legend(loc='boven links')
aan.
Overweeg dit voorbeeld (getest met 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()
![voer hier de beschrijving van de afbeelding in] Enigszins aangepast van deze tutorial: http://jakevdp.github.io/mpl_tutorial/tutorial_pages/tut1.html
Hier is een voorbeeld om je te helpen...
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()
Voeg labels toe aan elk argument in uw plot oproep die overeenkomen met de reeks die het grafisch weergeeft, dat wil zeggen label = "series 1"
Voeg dan Pyplot.legend()
toe aan de onderkant van je script en de legenda zal deze labels weergeven.