gpt4 book ai didi

matplotlib - Jupyter Notebook 中使用 matplotlib 的快速图像序列/动画

转载 作者:行者123 更新时间:2023-12-05 05:08:34 24 4
gpt4 key购买 nike

我似乎无法找到一种在 Jupyter Notebook 中使用普通 matplotlib 绘制图像序列的简单快速的方法。我试过 FuncAnimation、fig.canvas.draw()、blitting,以及标准的 imshow-pause 组合;没有成功或刷新率非常慢。我不需要图像是交互式的——它们只需要按顺序显示并且不能为每个图像弹出一个新的图形窗口。我在这里看到了很多解决方案,但似乎没有一个能按我想要的方式工作。

我的一般管道会进行重要的处理,每张图像都会在一段时间或 for 循环内生成和绘制。 FuncAnimation 是不可取的,因为它需要传递一个函数句柄,而我的用例涉及许多使其难以使用的参数和状态变量。

我得到的最好的是下面使用 fig.canvas.draw() 的工作示例 - 显示每次迭代绘制时间线性增加,我需要它保持不变!

import numpy as np
import matplotlib.pyplot as plt
from timeit import default_timer as timer
%matplotlib notebook

num_iters = 50
im = np.arange(60).reshape((15,4))

fig, ax = plt.subplots(1,1)
fig.show()
fig.canvas.draw()

iter_times = np.zeros(num_iters)
for i in range(num_iters):
im = np.roll( a=im, shift=1, axis=0 )

t0 = timer()
ax.imshow(im.T, vmin=im.min(), vmax=im.max())
ax.set_title('Iter # {}/{}'.format(i+1, num_iters))
fig.canvas.draw()

iter_times[i] = timer()-t0

plt.figure(figsize=(6,3))
plt.plot(np.arange(num_iters)+1, iter_times)
plt.title('Imshow/drawing time per iteration')
plt.xlabel('Iteration number')
plt.ylabel('Time (seconds)')
plt.tight_layout()
plt.show()

最佳答案

我认为问题在于地 block 正在“建立”,所以每一次都在被策划。如果您在 imshow() 之前添加 ax.clear(),您将获得线性绘图时间。

关于matplotlib - Jupyter Notebook 中使用 matplotlib 的快速图像序列/动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58206956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com