python - matplotlib 保存每 n 个步骤的动画

标签 python animation matplotlib

我正在模拟具有多个时间步长的东西,并且涉及很多步骤。我想将我的结果动画化,每 n 只绘制一个步骤。

现在我有两个不起作用的提议。第一个似乎没有正确循环,第二个仍然用图中未更新的步骤填充视频,使文件又大又慢。

你能帮我吗?

谢谢

X, Y = np.meshgrid(256,256)
fig,ax = plt.subplots()
plot_every = 50
saved_steps = []
def make_step(s, t):
c = ...
    if (s%plot_every) == 0:
        print("plotting step {:.0f} , t ={:.0f} ".format(s, t*dt))
        ax.clear()
        ax.contourf(X, Y, c,
                np.arange(0, 1.0, 0.01),
                extend='both')
        saved_steps.append(ax)

for s , t in enumerate(range(t_steps)):
    make_step(s,t)

print("will now save anim")
def plot_ani(i):
    return saved_steps[i]

 anim = animation.FuncAnimation(fig, plot_ani,range(len(saved_steps)) , interval=500,  blit=False)

或:

fig,ax = plt.subplots()
saved_steps = []
def make_step(s, t):  
    if (s%plot_every) == 0:
        print("plotting step {:.0f} , t ={:.0f} ".format(s, t*dt))
        ax.clear()
        ax.contourf(X, Y, c,
                np.arange(0, 1.0, 0.01),
                extend='both')
        return ax

 anim = animation.FuncAnimation(fig, make_step,range(len(saved_steps)) , interval=500,  blit=False)

然后我就这么做

anim.save('spinodal_decompo_ex.ogv',  codec='libtheora')

最佳答案

第一种方法的问题是您尝试将 matplotlib axes 对象存储在列表中。但是,您存储在列表中的ax始终是相同的。一旦调用 ax.clear(),甚至之前保存的 ax 对象也会被清除。

第二种方法的问题是,FuncAnimation 将始终保存每个时间步的图形。无论您是否更改轴中的某些内容都没关系。

转向解决方案:
始终明智地坚持的一个原则是将数据生成和计算与数据可视化分开
因此,建议是

首先计算数据。

time_steps = 10000
data = []
for t in range(time_steps):
    d = calculate_data(t)
    data.append(d)
    # alternatively save data to file
    # if it's to big to be kept in memory.

然后才开始可视化

# now start visualizing
plot_every = 50
fig, ax = plt.subplots()

def make_step(step):  
    ax.clear()
    # recall data from list, but take only every 50th entry
    c = data[step*plot_every]  #alternatively reload data from file
    ax.contourf(X, Y, c, ...)

anim = animation.FuncAnimation(fig, make_step,range(time_steps//plot_every), interval=500)

关于python - matplotlib 保存每 n 个步骤的动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41637343/

相关文章:

python嵌套类

python - 我的索引超出了列表错误

python - 如何在 python 中使用 ctypes 重载 C 库的弱声明函数?

ios - 在 gif 动画上添加标签和 ImageView 并分享 gif 动画

python - 不使用 Matplotlib Python 在后台获取热图

python - 访问 def 中的 matplotlib 图

python - 快速有效地减去数组的方法

javascript - 滚动时控制/动画dom元素的最佳方式

wpf - 是否有显示虚拟人的库 [WPF]

python-3.x - 在 matplotlib 中绘制垂直双头箭头