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

Matplotlib动画无法适配Jupyter Notebook单元格问题求助

Fixing Matplotlib Animation Fit Issue in Jupyter Notebook

Hey there! I’ve run into this exact problem before—animations built with Matplotlib in Jupyter often refuse to resize properly to fit the cell. Let’s walk through a few practical fixes that should get your animation looking right:

1. Set Explicit Figure Size & DPI Upfront

The most common culprit is an unconfigured figure dimension. If your figure is too large or small, the rendered video won’t align with the cell’s width. Define figsize and dpi when creating your subplot to match Jupyter’s cell layout:

import matplotlib.pyplot as plt
import matplotlib.animation as animation
from IPython.display import HTML

# Adjust figsize and dpi to fit your cell (8x6 is a safe default)
fig, ax = plt.subplots(figsize=(8, 6), dpi=100)
l, = ax.plot([],[], "k.")
ax.set_xlim([0, L])
ax.set_ylim([0, L])

def animate(i):
    l.set_data(xPos[:i], yPos[:i])

# Create animation first, then convert to video (split this step for clarity)
ani = animation.FuncAnimation(fig, animate, frames=len(xPos))
video = ani.to_html5_video()
HTML(video)

2. Add Responsive CSS to the HTML Output

Sometimes the video element needs a nudge to fill the cell. Wrap the generated video in a div with width:100% styling to force it to adapt:

ani = animation.FuncAnimation(fig, animate, frames=len(xPos))
video = ani.to_html5_video()
# Wrap in a responsive div to make it fit the cell
HTML(f'<div style="width:100%; max-width:800px;">{video}</div>')

3. Configure Global Matplotlib Settings

If you want this fix to apply to all your animations, set global Matplotlib parameters optimized for Jupyter:

# Set global defaults once at the top of your notebook
plt.rcParams['figure.figsize'] = (8, 6)
plt.rcParams['figure.dpi'] = 100
plt.rcParams['animation.html'] = 'html5'

# Now create your animation as usual—no need to call HTML() explicitly
fig, ax = plt.subplots()
l, = ax.plot([],[], "k.")
ax.set_xlim([0, L])
ax.set_ylim([0, L])

def animate(i):
    l.set_data(xPos[:i], yPos[:i])

ani = animation.FuncAnimation(fig, animate, frames=len(xPos))
display(ani)  # Just display the animation object directly

4. Clear Leftover Figures

Old, unused figures from previous runs can sometimes cause sizing conflicts. Add this line at the start of your cell to clean up:

plt.close('all')  # Clear any existing figures before creating a new one
fig, ax = plt.subplots(figsize=(8, 6), dpi=100)
# Rest of your animation code...

These tweaks work because they either control the original figure’s dimensions, force the video element to adapt to the cell, or eliminate hidden conflicts from leftover plots.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:52:15