TL; DR -> Làm thế nào người ta có thể tạo chú thích cho một đồ thị dòng trong
Matplotlib
'sPyPlot
mà không tạo ra bất kỳ biến thêm?Thêm một huyền thoại để PyPlot trong Matplotlib theo cách đơn giản nhất có thể
Hãy xem xét kịch bản vẽ đồ thị dưới đây:
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()
Như bạn có thể thấy, đây là một sử dụng rất cơ bản của matplotlib
's PyPlot
. Đây tưởng tạo ra một đồ thị như hình dưới đây:
Không có gì đặc biệt, tôi biết. Tuy nhiên, không rõ dữ liệu đang được vẽ ở đâu (Tôi đang cố vẽ dữ liệu của một số thuật toán sắp xếp, độ dài so với thời gian đã thực hiện và tôi muốn đảm bảo mọi người biết được dòng nào). Vì vậy, tôi cần một huyền thoại, tuy nhiên, việc xem xét ví dụ sau đây (from the official 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)
Bạn sẽ thấy rằng tôi cần phải tạo thêm một biến ax
. Làm cách nào để thêm chú giải vào biểu đồ mà không có phải tạo biến phụ này và giữ lại sự đơn giản của tập lệnh hiện tại của tôi.
Tôi bối rối vì lo ngại của bạn về việc tạo thêm biến. Bạn phải làm cho những đồ vật đó đằng sau hậu trường. – tacaswell
@tcaswell Hãy để tôi cố gắng thuyết phục họ. Tôi không muốn tạo thêm các biến, bởi vì nó làm tăng thêm sự phức tạp cho toàn bộ kịch bản lệnh. Tôi đang cố gắng để _teach_ này cho một loạt các sinh viên, và vì họ đã không sử dụng 'matplotlib' trước đây, tôi muốn giữ mọi thứ đơn giản nhất có thể. Ngoài ra, nếu bạn nhìn vào câu trả lời của Rob, câu trả lời của nó đơn giản hơn nhiều so với ví dụ được hiển thị trên trang web. Tôi hy vọng rằng sẽ giúp. –
Tôi cho rằng sử dụng giao diện máy trạng thái làm cho nó _harder_ hiểu được về lâu dài bởi vì phần lớn nó đang được thực hiện 'bằng phép thuật'. Ngoài ra, quy ước là sử dụng 'nhập matplotlib.pyplot thành plt' thay cho' PyPlot' – tacaswell