Matplotlib - plt.show () บนวัตถุแผนภูมิ
ฉันมีตัวอย่างง่ายๆที่นี่ ฉันกำลังสร้างพล็อตจากวัตถุขวานที่ส่งคืนจากฟังก์ชัน:
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?
คำถามของฉันเกี่ยวกับ plt.show () ในตอนท้าย เห็นได้ชัดว่านี่แสดงผลลัพธ์ของแผนภูมิ แต่ทำไม? สำหรับฉันดูเหมือนว่า plt.show () จะไม่ผูกติดกับอะไรเลย ฉันมีchartวัตถุของฉันซึ่งมีแผนภูมิของฉันพร้อมพารามิเตอร์ทั้งหมดและไม่มีอะไร แต่ plt.show () รู้ว่าจะโต้ตอบกับสิ่งนี้อย่างไร? ดูเหมือนจะง่ายกว่าที่จะมีบางอย่างเช่นchart.show()เดียวchartกับอินสแตนซ์ของคลาส
คำตอบ
คำถามที่ดี! เป็นแกนสร้างขึ้นเมื่อคุณเรียกchart plt.subplots()Pyplot คือสิ่งที่เรียกว่า API "stateful" เมื่อคุณโทรไปยังฟังก์ชัน plt. * ฟังก์ชันนี้จะเปลี่ยนสถานะภายในของ pyplot และอาจส่งผลต่อการโทรในอนาคต เมื่อคุณโทรplt.subplots()ไปมันจะรู้ว่ามีรูปที่สร้างขึ้นใหม่พร้อมแกนย่อยที่สร้างขึ้นใหม่อยู่ข้างใน
ในทำนองเดียวกันถ้าคุณเรียกplt.plot()มันจะมีบันทึกที่เก็บไว้ว่าแกนล่าสุดคืออะไรและลงจุดข้อมูลบนพล็อตนั้น
ลองดูซอร์สโค้ด pyplotและคุณจะเห็นว่ามันมีmanagerตัวแปรส่วนกลางที่ใช้เก็บพล็อตปัจจุบันอย่างไรและอัปเดตmanagerเมื่อคุณสร้างพล็อต
Figure.show()นอกจากนี้ยังมี ถ้าคุณต้องการหลีกเลี่ยง pyplot มันจะมีลักษณะเช่นนี้