解決matplotlib使用plt.pause動態繪圖視窗無法關閉問題

mulingLHY發表於2020-12-08

解決思路:迴圈中判斷繪圖視窗是否關閉,如果關閉則退出動態繪圖的迴圈

plt生成figure物件時需要指定一個int型別的id(如不指定,plt內部自動生成),可通過該id獲取到figure物件(儲存在matplotlib._pylab_helpers.Gcf.figs),當視窗關閉時,plt儲存的id會被清除,通過判斷id是否存在則可以判斷視窗是否關閉

兩種情況如下,具體見註釋

使用plt繪圖

from matplotlib import pyplot as plt
'''
    使用plt繪圖,只會有一個視窗
    因此可以通過判斷id數目是否為0來判斷繪圖視窗是否關閉
'''
plt.plot() #需要在迴圈外面生成繪圖視窗
while True:
    if len(plt.get_fignums())==0:
        break

    #進行更新資料和繪圖操作
    #...
else:
    plt.show()

使用figure物件導向繪圖

import matplotlib.pyplot as plt
'''
    plt.figure()生成fig時指定id,直接通過id是否存在即可判斷
    如果不指定id,也可通過fig.canvas.manager.num

    順便一提,直接使用plt繪圖時的fig物件可以通過plt.gcf()獲取
    因此也可獲取其id後通過這種方法判斷
'''
figID=1
fig=plt.figure(figID)

while True:
    if not plt.fignum_exists(figID):
        break

    #進行更新資料和繪圖操作
    #...
else:
    plt.show()
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章