TL;DR -> Bagaimana kita bisa membuat sebuah legenda grafik garis di
Matplotlib
'sPyPlot
tanpa ada tambahan variabel?
Perhatikan grafik script di bawah ini:
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()
Seperti yang anda lihat, ini adalah sangat dasar penggunaan matplotlib
's PyPlot
. Ini pilihan yang menghasilkan grafik seperti berikut:
Tidak ada yang istimewa, aku tahu. Namun, tidak jelas seperti apa data yang diplot di mana (I'm mencoba untuk plot data dari beberapa algoritma pengurutan, panjang terhadap waktu yang dibutuhkan, dan I'd seperti untuk memastikan orang-orang tahu yang mana). Dengan demikian, saya perlu legenda, namun, mengambil melihat pada contoh berikut di bawah ini(situs resmi):
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)
Anda akan melihat bahwa saya perlu untuk membuat tambahan variabel ax
. Bagaimana saya dapat menambahkan sebuah legenda grafik saya without harus membuat tambahan ini variabel dan tetap mempertahankan kesederhanaan saya saat ini naskah.
Tambahkan label=
untuk masing-masing dari anda plot()
panggilan, dan kemudian memanggil legenda(loc='kiri atas')
.
Pertimbangkan contoh ini (diuji dengan 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()
Sedikit modifikasi dari tutorial ini: http://jakevdp.github.io/mpl_tutorial/tutorial_pages/tut1.html
Anda dapat mengakses Sumbu contoh (ax
) dengan plt.gca()
. Dalam hal ini, anda dapat menggunakan
plt.gca().legend()
Anda dapat melakukan ini dengan menggunakan label=
kata kunci di masing-masing plt.plot()
panggilan atau dengan menetapkan label anda sebagai tuple atau daftar dalam legenda
, seperti dalam contoh kerja:
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()
Namun, jika anda perlu untuk mengakses Sumbu contoh lebih dari sekali, saya tidak menyarankan menyimpannya ke variabel ax
dengan
ax = plt.gca()
dan kemudian memanggil ax
dan bukan plt.gca()
.
Berikut ini's contoh untuk membantu anda keluar ...
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()
Plot yang sederhana untuk sinus dan cosinus kurva dengan legenda.
Digunakan 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()
Tambahkan label untuk masing-masing argumen di plot anda menghubungi yang sesuai untuk seri ini adalah grafik, yaitu label = "1"
Maka cukup tambahkan Pyplot.legenda()
ke bawah dari script anda dan legenda akan menampilkan label ini.
Anda dapat menambahkan kustom legenda documentation
pertama = [1, 2, 4, 5, 4] kedua = [3, 4, 2, 2, 3] plt.plot(pertama,'g--', kedua, 'r--') plt.legenda(['Pertama Daftar','Kedua Daftar'], loc='kiri atas') plt.tampilkan()