Menambahkan legenda untuk PyPlot di Matplotlib dalam cara yang mungkin paling sederhana

TL;DR -> Bagaimana kita bisa membuat sebuah legenda grafik garis di Matplotlib's PyPlot 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.

Mengomentari pertanyaan (3)
Larutan

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

Komentar (5)

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

Komentar (1)

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

Komentar (0)

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

Komentar (0)

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.

Komentar (1)

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

Komentar (0)