簡體   English   中英

如何關閉 matplotlib 中的圖形?

[英]How do I close figure in matplotlib?

`

import matplotlib.pyplot as plt
import pandas as pd
l1 = [1,2,3,4]
l2 = [2,4,6,8]
fig = plt.figure()


def func():
    plt.pause(1)
    plt.plot(l1,l2)
    plt.draw()
    plt.pause(1)
    input("press any key to continue...")
    plt.close(fig)
    plt.pause(1)

while True:
    func()
    plt.pause(1)

`

這是修改后的:

`

import matplotlib.pyplot as plt
import pandas as pd
l1 = [1,2,3,4]
l2 = [2,4,6,8]
fig = plt.figure()
a = 1

def func(num):
    input(f"the {num}th window is not opened yet")
    plt.pause(1)
    plt.plot(l1,l2)
    plt.draw()
    print(f"the {num}th window is opened")
    plt.pause(1)
    input("press any key to continue...")
    plt.close(fig)
    plt.pause(1)
    print(f"the {num}th window is closed")
while True:
    func(a)
    plt.pause(1)
    a+=1

`

如果我不使用 while True 循環,它會在我按下任意鍵時停止運行,這就是我的意圖。 但是,如果我使用 while True 循環運行此代碼,即使我按下左上角的任意鍵或 x 按鈕,圖形 window 也不會關閉。 我認為這是由於 while True。 我不知道如何解決這個問題,保持真。 請幫我!

  • 修改:當“第 2 個 window 尚未打開”輸入消息出來時,我可以看到一個打開的 window。 可能,window 將是第一次循環的那個,因為當時沒有打開第二個 window。 為什么第一個 window 還在? 我使用 plt.close() 關閉 window。

問題不在於while True:就像你如何創造你的人物一樣。 讓我們從概念上逐步完成您的過程:

  1. fig = plt.figure()創建一個圖形並將句柄存儲在fig中。
  2. 然后你調用func ,它在圖上繪制並最終調用plt.pause(1)
  3. 你循環並再次調用func 這一次, plt.plot(l1, l2)創建了一個圖形,因為沒有打開的圖形。
  4. func調用plt.close(fig) 但是fig中存儲的句柄不是你打開的圖,所以你的圖當然不會關閉。

要關閉正確的圖形,請打開func內的圖形。 使用面向 object 的 API 可以讓您更好地控制打開、關閉、plot 等的內容:

import matplotlib.pyplot as plt
import pandas as pd

l1 = [1, 2, 3, 4]
l2 = [2, 4, 6, 8]

def func():
    fig, ax = plt.subplots()
    ax.plot(l1, l2)
    plt.show(block=False)
    plt.pause(1)
    input("press any key to continue...")
    plt.close(fig)
    plt.pause(1)

while True:
    func()

或者,您可以將plt.close(fig)替換為plt.close() ,這等效於plt.close(plt.gcf()) ,因此您不必知道新圖形的句柄。

每次執行新循環時,都會創建一個新的 window。 您可以關閉此 window,但會立即重新出現一個新的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM