【发布时间】:2021-11-10 12:06:35
【问题描述】:
我想为循环中的每次迭代更新 matplotlib 的图形。它适用于大约前 30 次迭代,但随后更新停止,尽管有更多迭代。
下面你可以找到我的图代码:
import numpy as np
import matplotlib.pyplot as plt
class SimpOutput:
fig = None
ax_l = None
ax_r = None
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")
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__":
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 编写代码。
有没有人有同样的问题,或者更确切地说,有没有人知道如何解决这个问题?
提前致谢!
最佳,
塞巴斯蒂安
【问题讨论】:
-
包括一个可重现的例子
-
哦,对不起!刚刚为 update() 添加了一个带有随机可能值的简单循环。
标签: python matplotlib