【发布时间】:2022-01-23 00:05:31
【问题描述】:
我想用在 for 循环的每次迭代中计算的值来更新我的 matplotlibplot。这个想法是我可以实时查看计算了哪些值,并在我的脚本运行时通过迭代观察进度迭代。我不想先遍历循环,存储值然后执行绘图。
这里有一些示例代码:
from itertools import count
import random
from matplotlib.animation import FuncAnimation
import matplotlib.pyplot as plt
def animate(i, x_vals, y_vals):
plt.cla()
plt.plot(x_vals, y_vals)
if __name__ == "__main__":
x_vals = []
y_vals = []
fig = plt.figure()
index = count()
for i in range(10):
print(i)
x_vals.append(next(index))
y_vals.append(random.randint(0, 10))
ani = FuncAnimation(fig, animate, fargs=(x_vals, y_vals))
plt.show()
我在网上看到的大多数示例都处理动画的所有内容都是全局变量的情况,我想避免这种情况。当我使用调试器逐行遍历我的代码时,该图确实出现并且它是动画的。当我只在没有调试器的情况下运行脚本时,会显示图形但没有任何内容,并且我可以看到我的循环没有经过第一次迭代,首先等待图形窗口关闭然后继续。
【问题讨论】:
-
你不应该在循环中使用
plt.show()。毕竟你只想显示一次窗口。 -
我应该在哪里调用 plt.show()?如果我把它放在 for 循环之外,那么它只会在 for 循环完成执行后显示图形窗口。相反,如果我将 show() 命令放在 for 循环之前,它将阻止执行,直到图形窗口关闭。使用这两个选项,在 for 循环执行期间看不到绘图,我是否在这里遗漏了一些东西以使其正常工作?
-
在循环外使用 plt.show(),在循环的每次迭代中清除坐标轴并使用循环内部的新值重新绘制它,不要使用动画。
标签: python matplotlib matplotlib-animation