While 循環中的即時繪圖:故障排除指南
嘗試建立即時繪圖時,必須了解原因在while 循環期間,繪圖更新可能不會如預期發生。在此特定實例中,使用 matplotlib 實作即時繪圖以視覺化從 OpenCV 中的相機檢索的資料時出現問題。
為了隔離該問題,提供了一個簡化的範例程式碼:
fig = plt.figure() plt.axis([0, 1000, 0, 1]) i = 0 x = list() y = list() while i < 1000: temp_y = np.random.random() x.append(i) y.append(temp_y) plt.scatter(i, temp_y) i += 1 plt.show()
期望看到單獨繪製的1000 個點,令人驚訝的是,程式碼只顯示第一個點,然後等待循環完成,然後再填入圖表的其餘部分。出現這種情況是因為 matplotlib 的預設行為是等到程式結束時繪製整個圖形。
要克服此限制並實現即時繪圖,應將程式碼片段修改如下:
import numpy as np import matplotlib.pyplot as plt plt.axis([0, 10, 0, 1]) for i in range(10): y = np.random.random() plt.scatter(i, y) plt.pause(0.05) plt.show()
這裡的主要區別是包含 plt.pause(0.05)。此函數將程式的執行暫停 0.05 秒,允許繪製資料點並運行 GUI 的事件循環(使滑鼠互動成為可能)。
透過此修改,繪圖將在即時顯示新增至資料集中的每個點。
以上是為什麼我的 Matplotlib 即時繪圖不在 While 迴圈內更新?的詳細內容。更多資訊請關注PHP中文網其他相關文章!