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

Matplotlib中用FuncAnimation与Affine2D实现图像动效时图像消失问题

问题分析与解决方案

代码中的错误点

  • 拼写错误:导入FuncAnimation时写成了FumcAnimation,调用图像显示方法时写成了ax.imgshow(正确应为ax.imshow)
  • 变换坐标未关联轴系统:直接给图像设置Affine2D变换会脱离坐标轴的坐标体系,导致图像移出可见区域
  • 帧数量过少:仅设置两帧(0和1),平移效果不明显,且步长设置不符合坐标尺度

修正后的代码

from matplotlib.animation import FuncAnimation
from matplotlib.transforms import Affine2D
from matplotlib import pyplot as plt

fig, ax = plt.subplots()
# 读取图像并正确调用imshow方法
img = ax.imshow(plt.imread("demo.png"), aspect="equal")
# 保存图像初始变换,用于叠加后续平移操作
initial_transform = img.get_transform()

def update(i):
    # 每次向右平移0.1个数据单位,将平移变换与初始变换叠加
    transform = Affine2D().translate(0.1 * i, 0) + initial_transform
    img.set_transform(transform)
    # 同步调整轴范围,确保图像始终在视野内
    ax.set_xlim(0 - 0.1*i, img.get_extent()[1] - 0.1*i)
    return img,

# 设置20帧动画,每帧间隔100ms,实现连续平移效果
anim = FuncAnimation(fig, update, frames=range(20), interval=100)
plt.show()

关键修改说明

  1. 修正拼写错误:修复导入和方法调用的拼写问题,确保代码能正常运行
  2. 关联轴变换:将Affine2D的平移变换与图像初始变换(包含轴坐标系统)叠加,保证图像在正确的坐标空间内移动
  3. 适配轴范围:每次更新时调整轴的x范围,避免图像平移后移出视野
  4. 优化动画参数:增加帧数量并设置时间间隔,让平移效果更连贯自然

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 12:33:12