如何使用 Matplotlib 以非阻塞方式繪圖:為什麼 `show(block=False)` 並不總是有效?

Barbara Streisand
發布: 2024-11-03 04:02:02
原創
442 人瀏覽過

How to Plot in a Non-Blocking Way with Matplotlib: Why Does `show(block=False)` Not Always Work?

使用Matplotlib 以非阻塞方式繪圖:解決執行問題

當嘗試使用Matplotlib 繪製函數而不停止執行時,您可能會遇到與GUI 和後端互動相關的困難。一個常見的誤解是 show(block=False) 的用法,它可能並不總是有效,這取決於後端。

您提供的程式碼示範了 show(block=False) 的用法,但看起來您是在呼叫 show() 之前不使用 plt.ion()。 plt.ion() 啟動互動模式,允許非阻塞繪圖,您可以在其中繪製和暫停更新。

啟用 plt.ion() 後,您可以呼叫 plt.show() 顯示繪圖視窗。該視窗將保持開啟且非阻塞狀態,讓您繼續執行。但是,要查看更新後的繪圖,您需要使用 plt.draw() 重新繪製畫布,並使用 plt.pause(timeout) 暫停執行一小段時間。 plt.pause() 中的逾時參數決定了暫停的長度(以秒為單位)。

在您的特定情況下,還需要注意的是,每次調用 plt.plot() 時,都會產生一個新繪圖在同一視窗中建立。如果您想要更新現有繪圖,則應使用 plt.plot(x, y, color='r')。這將以紅色繪製新資料點,同時保留現有繪圖。

以下是程式碼的修訂版本,應解決非阻塞問題並更新現有繪圖:

<code class="python">import matplotlib.pyplot as plt
import numpy as np

def main():
    plt.ion()  # Activate interactive mode
    plt.show()  # Display the plot window

    plt.axis([-50,50,0,10000])
    x = np.arange(-50, 51)
    for pow in range(1,5):
        y = [Xi**pow for Xi in x]
        plt.plot(x, y, color='r')  # Update the plot in red color
        plt.draw()
        plt.pause(0.001)  # Pause for a brief period
        input("Press [enter] to continue.")

if __name__ == '__main__':
    main()</code>
登入後複製

以上是如何使用 Matplotlib 以非阻塞方式繪圖:為什麼 `show(block=False)` 並不總是有效?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板