我想在一個回圈中的每一次迭代中更新matplotlib的一個圖。它在前30次迭代中是有效的,但隨后更新就停止了,盡管有更多的迭代。
下面你可以找到我的圖的代碼:
import numpy as np
import matplotlib.pyplot as plt
class SimpOutput:
fig = None
ax_l = None: ax_l = None.
ax_r = None[/span
it_container = []
obj_container = []
def __init__(self):
self.fig, (self.ax_l, self.ax_r) = plt.subplots(nrows=1, ncols=2, figsize=(8, 4)
self.ax_l.set_title("Flexibility $c$")
self.ax_l.set_ylabel("obj.value $c$")
self.ax_l.set_xlabel("Iteration")
self.ax_r.set_title("Shape")
self.fig.show()
def update(self, iteration, obj, x)。
self.it_container.append(iteration)
self.obj_container.append(obj)
self.ax_l.plot(self.it_container, self.obj_container, c="r"/span>)
x = x.reshape((4, 4)
x = x.T
x = np.flip(x, 0)
self.ax_r.imshow(x, cmap="binary")
plt.pause(0.1)
self.fig.show()
plt.pause(0.1)
if __name__ == "__main__"/span>:
out = SimpOutput()
for i in range(50)。
out.update(i, 1000 * np.random.rand(), np.random.rand(16)
update在每個回圈中被呼叫。
使用fig.canvas.show()和不同的暫停值并不影響更新。此外,set_array()和set_data()方法也沒有解決這個問題。在除錯的時候,每一次迭代都會更新數字。我是用PyCharm撰寫的代碼。
是否有人遇到過同樣的問題,或者說是否有人知道如何解決這個問題?
預先感謝!
祝你好運,
Sebastian
uj5u.com熱心網友回復:
我試著運行了以下簡單的代碼:
for i in range(50)。
plt.clf()
pd.DataFrame([3,4,i]).plot.line(title=f'iteration {i}'/span>)
plt.show()
沒有更新任何數字,只是清除了舊的數字并繪制了一個新的數字。
它也在30次迭代后停止創建新的數字。和你的問題一樣。
我懷疑問題出在pycharm上,所以我又試了一個方法。
我用plt.savefig(f'example_{i}.jpg')替換了plt.show()。它確實保存了檔案夾中的所有50個數字(意味著作業正常),此外,它給了我一個警告:
envsmy_main_envlibsite-packagespandasplotting/_matplotlibcore.py:337: RuntimeWarning。超過20個數字已經被打開。通過pyplot介面(`matplotlib.pyplot.figure`)創建的數字將被保留,直到明確關閉為止并且可能消耗太多的記憶體。(要控制這個警告,參見rcParam `figure.max_open_warning`)。)
fig = self.plt.figure(figsize=self.figsize)
說明問題出在平行打開的數字數量上。你可以通過谷歌找到一些關于這個警告的答案(例如:關于開放數字過多的警告)。
我在代碼的開頭添加了引數。plt.rcParams.update({'figure.max_open_warning': 60})
現在,再次運行。在科學模式的pycharm中,它沒有作業。所以我關閉了科學模式(為每個圖打開一個新的圖),現在它作業得很好!所以我認為這個限制是pycharm對科學模式的限制--在同一時間可以打開多少個圖。
通過進入設定->工具->Python科學->取消勾選 "在工具視窗中顯示圖 "的方框,關閉科學模式的繪圖。
這對我有用。我不知道如何改變科學模式下的限制(如果可能的話)。我相信這為你解決你的問題提供了足夠的啟示--無論是通過保存數字還是通過在沒有科學模式的情況下繪制它們。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/312375.html
標籤:
