Matplotlib - plt.show () pada objek bagan

Aug 28 2020

Saya punya contoh yang sangat sederhana di sini. Saya membuat plot dari objek kapak yang dikembalikan dari suatu fungsi:

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?

Pertanyaan saya adalah tentang plt.show () di bagian akhir. Jelas, ini menunjukkan keluaran dari grafik. Tapi kenapa? Bagi saya, sepertinya plt.show () tidak terikat pada apa pun. Saya memiliki chartobjek saya , yang berisi bagan saya dengan semua parameternya dan yang lainnya. Tapi bagaimana plt.show () tahu untuk berinteraksi dengan ini? Tampaknya lebih intuitif untuk memiliki sesuatu seperti chart.show(), seperti chartinstance kelas.

Jawaban

2 Keon Aug 28 2020 at 01:42

Pertanyaan bagus! chartadalah Sumbu yang dibuat saat Anda menelepon plt.subplots(). Pyplot adalah apa yang disebut API "stateful". Saat Anda melakukan panggilan ke fungsi plt. *, Ini mengubah status internal pyplot dan itu dapat memengaruhi panggilan di masa mendatang. Saat Anda memanggil plt.subplots(), ia tahu bahwa ada Figur yang baru dibuat dengan Sumbu subplot yang baru dibuat di dalamnya.

Demikian pula, jika Anda memanggil plt.plot(), ia memiliki catatan tersimpan tentang sumbu terbaru, dan memplot data pada plot itu.

Lihatlah kode sumber pyplot dan Anda dapat melihat bagaimana ia memiliki managervariabel global yang digunakannya untuk menyimpan plot saat ini, dan memperbaruinya managerketika Anda membuat plot.

Selain itu, ada Figure.show(). Jika Anda ingin mengerjakan pyplot, tampilannya akan seperti ini