Có hai cách để thực hiện. Một trong số đó cung cấp cho bạn các mục nhập huyền thoại cho mỗi điều bạn vẽ, và một cái khác cho phép bạn đặt bất cứ điều gì bạn muốn trong truyền thuyết, đánh cắp rất nhiều từ câu trả lời this.
Dưới đây là cách đầu tiên:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-1,1,100)
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
#Plot something
ax.plot(x,x, color='red', ls="-", label="$P_1(x)$")
ax.plot(x,0.5 * (3*x**2-1), color='green', ls="--", label="$P_2(x)$")
ax.plot(x,0.5 * (5*x**3-3*x), color='blue', ls=":", label="$P_3(x)$")
ax.legend()
plt.show()
Chức năng ax.legend()
có nhiều hơn một sử dụng, đầu tiên chỉ tạo ra truyền thuyết dựa trên các dòng trong axes
đối tượng, allwos thứ hai bạn để kiểm soát các mục nhập theo cách thủ công và được mô tả here.
Về cơ bản, bạn cần cung cấp cho chú giải tay cầm dòng và nhãn được liên kết.
Cách khác cho phép bạn đặt bất kỳ thứ gì bạn muốn trong chú giải, bằng cách tạo các đối tượng và nhãn Artist
và chuyển chúng đến hàm ax.legend()
. Bạn có thể sử dụng điều này để chỉ đặt một số dòng của bạn trong truyền thuyết, hoặc bạn có thể sử dụng nó để đặt bất cứ điều gì bạn muốn trong truyền thuyết.
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-1,1,100)
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
#Plot something
p1, = ax.plot(x,x, color='red', ls="-", label="$P_1(x)$")
p2, = ax.plot(x,0.5 * (3*x**2-1), color='green', ls="--", label="$P_2(x)$")
p3, = ax.plot(x,0.5 * (5*x**3-3*x), color='blue', ls=":", label="$P_3(x)$")
#Create legend from custom artist/label lists
ax.legend([p1,p2], ["$P_1(x)$", "$P_2(x)$"])
plt.show()
Hoặc ở đây, chúng tôi tạo Line2D
đối tượng mới, và cung cấp cho họ với các huyền thoại.
import matplotlib.pyplot as pltit|delete|flag
import numpy as np
import matplotlib.patches as mpatches
x = np.linspace(-1,1,100)
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
#Plot something
p1, = ax.plot(x,x, color='red', ls="-", label="$P_1(x)$")
p2, = ax.plot(x,0.5 * (3*x**2-1), color='green', ls="--", label="$P_2(x)$")
p3, = ax.plot(x,0.5 * (5*x**3-3*x), color='blue', ls=":", label="$P_3(x)$")
fakeLine1 = plt.Line2D([0,0],[0,1], color='Orange', marker='o', linestyle='-')
fakeLine2 = plt.Line2D([0,0],[0,1], color='Purple', marker='^', linestyle='')
fakeLine3 = plt.Line2D([0,0],[0,1], color='LightBlue', marker='*', linestyle=':')
#Create legend from custom artist/label lists
ax.legend([fakeLine1,fakeLine2,fakeLine3], ["label 1", "label 2", "label 3"])
plt.show()
Tôi cũng đã cố gắng để có được những phương pháp sử dụng patches
để làm việc, như trên trang hướng dẫn huyền thoại matplotlib, nhưng nó dường như không làm việc vì vậy tôi đã từ bỏ.
Vì vậy, trong ví dụ của bạn, 'recs' và' labels' có cùng độ dài không? Và không có cách nào chỉ để thêm một huyền thoại bằng cách sử dụng các điểm đánh dấu mặc định như được vẽ trong ví dụ của tôi? Có vẻ lạ là cách duy nhất để có một huyền thoại trong một âm mưu phân tán là tạo ra một danh sách các hình dạng cho tất cả các điểm, thay vì chỉ tự động gán tất cả các điểm cùng một hình dạng. – Karnivaurus
'Nhãn' trong ví dụ đầu tiên không đúng, tôi muốn sử dụng' các lớp' ở đó. Tôi cũng tìm thấy một cách thứ hai để tạo một huyền thoại trong tài liệu mà tôi đã thêm vào câu trả lời cùng với ảnh chụp màn hình. Tôi đã viết khối mã thứ hai với giả định rằng dữ liệu từ các lớp khác nhau được trộn lẫn. Nếu bạn biết thực tế dữ liệu của bạn được nhóm theo lớp và màu, bạn có thể đơn giản hóa đáng kể khối mã thứ hai bằng cách sử dụng ví dụ 'xc = x [0: 2]' cho lớp 'A'. Hoặc nếu dữ liệu của bạn ban đầu được chia theo lớp, thì chỉ đơn giản là không bao giờ kết hợp nó vào một danh sách duy nhất và bỏ qua nhu cầu xây dựng danh sách. – TheSchwa