TL;DR -> Hvordan kan man lage en tegnforklaring for et linjediagram i
Matplotlib
'sPyPlot
uten å opprette noen ekstra variabler?
Vennligst vurder grafskriptet nedenfor:
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()
Som du kan se, er dette en veldig grunnleggende bruk av matplotlib
's PyPlot
. Dette genererer ideelt sett en graf som den nedenfor:
Ikke noe spesielt, jeg vet det. Det er imidlertid uklart hvilke data som plottes hvor (jeg prøver å plotte dataene til noen sorteringsalgoritmer, lengde mot tid, og jeg vil gjerne sørge for at folk vet hvilken linje som er hvilken). Dermed trenger jeg en forklaring, men tar en titt på følgende eksempel nedenfor(fra det offisielle nettstedet):
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)
Du vil se at jeg trenger å opprette en ekstra variabel ax
. Hvordan kan jeg legge til en tegnforklaring i grafen min uten å måtte opprette denne ekstra variabelen og beholde enkelheten i det nåværende skriptet mitt.
Legg til en label=
til hvert av dine plot()
kall, og kall deretter legend(loc='upper left')
.
Se på dette eksempelet (testet med 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()
]1 Litt modifisert fra denne opplæringen: http://jakevdp.github.io/mpl_tutorial/tutorial_pages/tut1.html
Her er et eksempel for å hjelpe deg ...
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()
Legg til etiketter til hvert argument i plottanropet ditt som svarer til serien den graftegner, dvs. label = "serie 1"
Deretter legger du ganske enkelt til Pyplot.legend()
nederst i skriptet ditt, og legenden vil vise disse etikettene.