You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jupyter Notebook中Matplotlib多子图动画报错求助:解决RuntimeError

解决Matplotlib FuncAnimation多子图动画的RuntimeError问题

我明白你遇到的问题了——当设置blit=True时,FuncAnimation要求动画函数必须返回要更新的Artist对象序列,但你原来的run函数只是重复绘制子图和图像,没有返回任何符合要求的对象,所以触发了那个错误。

问题根源

blit=True的作用是只更新画面中变化的部分,提升动画效率,但这要求你明确告诉Matplotlib哪些元素需要更新。你原来的代码每次调用run都重新创建子图和绘制图像,不仅效率低,还没法返回可追踪的Artist对象。

修复方案

正确的做法是提前初始化所有子图和图像对象,然后在run函数里只更新图像的数据,最后返回这些需要更新的对象列表。具体修改如下:

import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np

# 假设x、y、z是已经定义好的三维数组,这里模拟测试数据
rows, cols, frames = 100, 100, 10
x = np.random.rand(rows, cols, frames)
y = np.random.rand(rows, cols, frames)
z = np.random.rand(rows, cols, frames)

fig = plt.figure()

# 提前创建三个子图
ax1 = plt.subplot(131)
ax2 = plt.subplot(132)
ax3 = plt.subplot(133)

# 初始化图像对象,保存返回的AxesImage实例
im1 = ax1.imshow(x[:, :, 0], cmap='gray')
im2 = ax2.imshow(y[:, :, 0], cmap='gray')
im3 = ax3.imshow(z[:, :, 0], cmap='gray')

# 一次性设置好标题、刻度等静态元素,不用在run里重复设置
for ax, title in zip([ax1, ax2, ax3], ['original', 'original 2', 'original_3']):
    ax.set_title(title)
    ax.set_xticks([])
    ax.set_yticks([])

def run(it):
    # 只更新图像的数据,不重新创建imshow对象
    im1.set_data(x[:, :, it])
    im2.set_data(y[:, :, it])
    im3.set_data(z[:, :, it])
    # 返回需要更新的Artist对象列表
    return [im1, im2, im3]

ani = animation.FuncAnimation(fig, run, frames=np.arange(0, 10), interval=30, blit=True)
# ani.save('mwe.mp4')
plt.show()

额外说明

如果你的标题需要随帧动态变化,可以提前保存标题对象,然后在run里更新并加入返回列表:

# 初始化时保存标题对象
title1 = ax1.set_title('original frame 0')
title2 = ax2.set_title('original 2 frame 0')
title3 = ax3.set_title('original_3 frame 0')

def run(it):
    im1.set_data(x[:, :, it])
    im2.set_data(y[:, :, it])
    im3.set_data(z[:, :, it])
    # 更新标题文本
    title1.set_text(f'original frame {it}')
    title2.set_text(f'original 2 frame {it}')
    title3.set_text(f'original_3 frame {it}')
    # 把标题也加入返回列表
    return [im1, im2, im3, title1, title2, title3]

这样修改后,动画就能正常运行,而且效率比原来的代码高很多,因为避免了重复创建子图和绘图元素。

内容的提问来源于stack exchange,提问作者a_parida

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:42:11