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

Matplotlib与Celluloid在Jupyter notebook中异常行为相关问题咨询

问题1:第二个静态空图的原因与解决方法

原因是Jupyter Notebook的matplotlib后端默认会自动渲染当前会话中最后生成的画布对象。你代码里创建了fig画布对象后没有主动关闭,生成HTML5视频的同时,Jupyter额外输出了该画布的静态渲染结果,因为动画渲染完成后画布上没有留存的可见元素,所以显示为空图。
解决方法:在调用camera.animate()生成动画后,主动关闭当前画布即可,修改对应代码段为:

animation = camera.animate(blit = False, interval = 10)
plt.close(fig) # 新增该行关闭画布
HTML(animation.to_html5_video())

问题2:动画中网格不显示的原因与解决方法

原因是celluloid的Camera.snap()只会捕获当前画布上添加的艺术家对象(比如scatter生成的散点、plot生成的线这类元素),你放在循环里的plt.grid()、plt.xlim()、plt.ylim()都属于坐标轴的属性配置,不属于独立的艺术家对象,不会被逐帧捕获。
解决方法:把所有固定的坐标轴配置统一挪到循环外,创建完坐标轴后就完成设置,不需要在每帧重复调用,修改后完整代码如下:

fig = plt.figure()
ax = plt.gca()
ax.set_aspect('equal')
# 固定轴配置提前到循环外
plt.xlim(-3, 3)
plt.ylim(-3, 3)
plt.grid()

camera = Camera(fig)

for i in range(result.t.size):
    if i % 10 == 0:
        x = result.y[0, i]
        y = result.y[1, i]
        plt.scatter(x, y, s = 100, c = 'red')
        camera.snap()

animation = camera.animate(blit = False, interval = 10)
plt.close(fig)
HTML(animation.to_html5_video())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:30:00