Matplotlib - plt.show () trên đối tượng biểu đồ
Tôi có một ví dụ thực sự đơn giản ở đây. Tôi đang tạo một âm mưu từ một đối tượng ax được trả về từ một hàm:
import matplotlib.pyplot as plt
x = ['a', 'b', 'c']
y = [1, 2, 3]
def make_plot():
fig, ax = plt.subplots()
ax.set_title('test bar chart')
return ax
chart = make_plot()
chart.bar(x, y)
plt.show() #why does this show the chart?
Câu hỏi của tôi là về plt.show () ở cuối. Rõ ràng, điều này cho thấy đầu ra của biểu đồ. Nhưng tại sao? Đối với tôi, nó không có vẻ như plt.show () bị ràng buộc với bất cứ điều gì. Tôi có chartđối tượng của mình , chứa biểu đồ của tôi với tất cả các tham số của nó và không có gì. Nhưng làm thế nào plt.show () biết để tương tác với điều này? Sẽ có vẻ trực quan hơn nếu có một cái gì đó giống chart.show()như charttrường hợp lớp.
Trả lời
Câu hỏi hay! chartlà một Axes được tạo ra khi bạn gọi plt.subplots(). Pyplot được gọi là API "trạng thái". Khi bạn thực hiện các cuộc gọi đến các hàm plt. *, Nó sẽ thay đổi trạng thái bên trong của pyplot và điều đó có thể ảnh hưởng đến các cuộc gọi trong tương lai. Khi bạn gọi plt.subplots(), nó biết rằng có một Hình mới được tạo với các Trục ô con mới được tạo bên trong nó.
Tương tự, nếu bạn gọi plt.plot(), nó có một bản ghi được lưu trữ về các trục gần đây nhất là gì và vẽ dữ liệu trên biểu đồ đó.
Hãy xem mã nguồn pyplot và bạn có thể thấy cách nó có một managerbiến toàn cục mà nó sử dụng để lưu trữ cốt truyện hiện tại và cập nhật nó managerkhi bạn tạo một cốt truyện.
Ngoài ra, có Figure.show(). Nếu bạn muốn làm việc với pyplot, nó trông giống như thế này