python - 高效更新多个 pyplots

标签 python matplotlib plot

我有一个脚本,应该在 for 循环的每次迭代中更新 25 个图像的网格。代码本质上是这样的(为了简单起见,我省略了无关的内容):

from matplotlib import pyplot as plt
plt.ion()
fig, ax = plt.subplots(5,5,figsize=(3,3))

for i in range(100):
    updateImages()
    for j in range(5):
         for k in range(5):
              ax[j,k].imshow(image[j,k])
    plt.draw()
    plt.pause(0.01)

问题是它运行得非常非常慢[不,不是 updateImages() 慢]。我相信有一种更有效的方法可以做到这一点,但到目前为止我还找不到任何例子。如有建议,我们将不胜感激!

最佳答案

程序在一段时间后运行缓慢的原因可能是您在始终调用 imshow 时仅向绘图添加了数据点,而不是替换/更新它们。尽管您总是只能看到最近绘制的点,但 Python 在经过大量循环后必须处理大量数据,这就是它变得缓慢的原因。

相反,您可以将 imshow 的第一个输出存储在列表中,然后更新数据。首先,创建一个具有与 ax 相同“形状”的列表 list_of_images 并将第一次迭代的图像存储在其中:

list_of_images[j,k] = imshow(...)

然后在迭代循环中,只需更新数据:

list_of_images[j,k].set_data(image[j,k])

这样,Python 必须处理的数据量不会随着迭代次数而增加,并且您的程序应该稳定。

<小时/>

编辑(由OP):根据这个答案,我尝试了以下操作:

from matplotlib import pyplot as plt
plt.ion()
fig, ax = plt.subplots(5,5,figsize=(3,3))
image_grid = ax.copy()  # Maybe there is a less awkward way to do this

for i in range(100):
    updateImages()
    for j in range(5):
         for k in range(5):
              image_grid[j,k].set_data(image[j,k])
    plt.draw()
    plt.pause(0.01)

它运行非常流畅(就像处理单个图像一样快)。谢谢!

关于python - 高效更新多个 pyplots,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43650023/

相关文章:

python - 在 TensorFlow 中导入巨大的非图像数据集

python - 如何将此语句打印到 txt 文件中

python - 如何在 Python 中创建以太坊钱包?

python 生成关键字的直方图/帕累托图

r - 雷达图上的误差线?

r - 对齐不同的绘图形状

python - 从下拉菜单或按钮-Python/Plotly 将 sqrt 设置为 yaxis 比例

python - 使用 wxPython 清除 matplotlib 中的背景

python - 散点图的轴限制 - Matplotlib

python - 让 matplotlib 工作 - 绘图未显示