Matplotlib - plt.show () บนวัตถุแผนภูมิ

Aug 28 2020

ฉันมีตัวอย่างง่ายๆที่นี่ ฉันกำลังสร้างพล็อตจากวัตถุขวานที่ส่งคืนจากฟังก์ชัน:

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กับอินสแตนซ์ของคลาส

คำตอบ

2 Keon Aug 28 2020 at 01:42

คำถามที่ดี! เป็นแกนสร้างขึ้นเมื่อคุณเรียกchart plt.subplots()Pyplot คือสิ่งที่เรียกว่า API "stateful" เมื่อคุณโทรไปยังฟังก์ชัน plt. * ฟังก์ชันนี้จะเปลี่ยนสถานะภายในของ pyplot และอาจส่งผลต่อการโทรในอนาคต เมื่อคุณโทรplt.subplots()ไปมันจะรู้ว่ามีรูปที่สร้างขึ้นใหม่พร้อมแกนย่อยที่สร้างขึ้นใหม่อยู่ข้างใน

ในทำนองเดียวกันถ้าคุณเรียกplt.plot()มันจะมีบันทึกที่เก็บไว้ว่าแกนล่าสุดคืออะไรและลงจุดข้อมูลบนพล็อตนั้น

ลองดูซอร์สโค้ด pyplotและคุณจะเห็นว่ามันมีmanagerตัวแปรส่วนกลางที่ใช้เก็บพล็อตปัจจุบันอย่างไรและอัปเดตmanagerเมื่อคุณสร้างพล็อต

Figure.show()นอกจากนี้ยังมี ถ้าคุณต้องการหลีกเลี่ยง pyplot มันจะมีลักษณะเช่นนี้