matplotlib 动画保存不遵守 blit=True 但它似乎在 plt.show() 中工作得很好

2023-12-08

我对 Python 很陌生,正在尝试使用 matplotlib 对文本进行动画处理。使用几个在线示例得出以下代码:

import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig, ax = plt.subplots()

plt.xlabel('Distance')
plt.ylabel('Height')
plt.title('Object Trajectory \n')

plt.legend(loc="upper right", markerscale=4, fontsize=10)
plt.grid()

text=ax.text(3,1,'Moving Text', ha="left", va="bottom",clip_on=True,rotation=90,fontsize=15)    
text2=ax.text(0,1,'Moving Text', ha="left", va="bottom",clip_on=True,fontsize=15)    

def init():
    ax.set_xlim(0,10)
    ax.set_ylim(0,10)
    return text,text2

def update(frame):        
    #Moving a text
    text=ax.text(3,1+(int(frame))/30,'Moving Text', ha="left", va="bottom",clip_on=True,rotation=90,fontsize=15)    
    text2=ax.text(0+(int(frame))/30,1,'Moving Text', ha="left", va="bottom",clip_on=True,fontsize=15)    

    return text,text2

anim = animation.FuncAnimation(fig, update, init_func=init, frames=120, interval=10, blit=True)

anim.save('try_animation.mp4',dpi=160,fps=30, writer="ffmpeg")

plt.show()

因此,当我在控制台中运行它时,我可以看到文本移动得很好。但是当我将其保存到 MP4 文件时,文本似乎没有位块传输。请帮忙。

谢谢

这是保存的视频文件的屏幕截图


您观察到的是预期的行为。 Blitting 是一种仅刷新部分图形输出的技术。在 matplotlib 的情况下,不是绘制完整的图形,而是仅刷新图形的一部分(即轴内的区域),并且仅绘制动画函数返回的那些艺术家。这使得屏幕上的动画速度更快。

然而,保存动画时,每一帧都需要完整绘制。

因此,为了让文本移动,我们应该更新单个文本的位置,而不是一遍又一遍地创建新文本。这可以通过以下方式完成

text.set_position((x,y))

因此这个例子看起来像

import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig, ax = plt.subplots()

plt.xlabel('Distance')
plt.ylabel('Height')
plt.title('Object Trajectory \n')
plt.grid()

text=ax.text(3,1,'Moving Text', ha="left", va="bottom",clip_on=True,rotation=90,fontsize=15)    
text2=ax.text(0,1,'Moving Text', ha="left", va="bottom",clip_on=True,fontsize=15)    

def init():
    ax.set_xlim(0,10)
    ax.set_ylim(0,10)
    return text,text2

def update(frame):        
    #Moving a text
    text.set_position((3, 1+(int(frame))/30))
    text2.set_position((0+(int(frame))/30,1))
    return text,text2

anim = animation.FuncAnimation(fig, update, init_func=init, frames=120, interval=10, blit=True)

anim.save('try_animation.mp4',dpi=160,fps=30, writer="ffmpeg")

plt.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

matplotlib 动画保存不遵守 blit=True 但它似乎在 plt.show() 中工作得很好 的相关文章

随机推荐

  • 如何使用 SSE2 对距离计算进行矢量化

    A 和 B 是向量或长度 N 其中 N 可以在 20 到 200 的范围内 我想计算这些向量之间距离的平方 即 d 2 A B 2 到目前为止我有 float a float b float d2 0 for int k 0 k lt N
  • DIV 与表格或 CSS 与愚蠢

    我知道表格用于表格数据 但使用它们进行布局非常诱人 我可以处理 DIV 以获得三列布局 但是当您有 4 个嵌套 DIV 时 它会变得棘手 是否有教程 参考可以说服我使用 DIV 进行布局 我想使用 DIV 但我拒绝花一个小时将我的 DIV
  • 获取单个 mysqli 查询中插入的所有行的 insert_id (多个值)

    使用 PHP 并使用 MYSQLI 尝试获取从具有多个值的单个插入查询插入的所有行的 insert id 将其保留在一次调用中以提高效率 我的实际代码在一个插入查询中有数百个值 不过 这里有一些仅包含 4 个值的插入的示例代码 sql IN
  • Visual Studio 2015 在条件断点中使用 Linq

    是否可以在条件断点内使用 Linq 当以下条件成立时 我尝试中断 parentElement ChildElements Any c gt c Id 1 当调试器被点击时 会显示以下错误消息 调试器无法计算该表达式 我已尝试以下条件 以防问
  • 有没有办法覆盖锁定图案屏幕?

    我想提供我自己的密码机制版本 这可能吗 没有 API 可供您替换锁定图案屏幕 因此您无法从 SDK 应用程序更改它 不过 如果您正在制作自己的固件 则可以更改它 尽管我不知道具体如何更改
  • 在phpStorm中指定php.ini

    我已经设置了我的 PHP 环境 PHPRC环境变量指向php ini Since PHPRC在 bash 启动期间设置 但从未为 phpStorm 设置 这意味着 phpStorm 使用了错误的php ini对于 CLI 这尤其令人烦恼 因
  • imshow() 的数字太小

    我正在尝试使用 imshow 可视化 numpy 数组 因为它类似于 Matlab 中的 imagesc imshow random rand 8 90 interpolation nearest 得到的图形在灰色窗口的中心非常小 而大部分
  • 从模式计算多个 data.frame 列的最佳方法

    我定期接收数据data frame宽格式如下 head data date NSW 1 AUS 1 NSW 2 AUS 2 1 2000 01 01 0 38358623 1 78824221 0 995984590 1 0744594 2
  • PHP中socket编程获取客户端IP

    我正在使用 PHP 编写一个使用套接字库的应用程序 如何获取客户端的IP 谢谢你的帮助 Use 套接字获取对等点名称
  • 我真的需要为 const 对象实现用户提供的构造函数吗?

    我有代码 class A public A default private int i 1 int main const A a return 0 它在 g 上编译得很好 参见ideone 但在 clang 上失败并出现错误 const 类
  • Three.js - 绕特定轴旋转对象

    我用过三个 REVISION 68 我已经按轴完成了旋转 OBJECT X z http jsfiddle net eVkgs 39 当我更改位置 OBJECT X 时 CubeGeometry applyMatrix new THREE
  • 如何让 Spring Data Neo4j 和 Spring Data JPA 协同工作?

    我有一个应用程序 它使用 MySQL 并通过 REST Neo4j 服务器版本执行一些批处理作业 我不知道如何让它们正确地协同工作 我可以让它们同时工作 但不能同时工作 我发现的帖子并不特定于 Neo4j 的服务器版本 也许这就是问题所在
  • Python 写入 .txt 文件时换行符“\n”不起作用

    for word in keys out write word str dictionary word n out open alice2 txt r out read 由于某种原因 Python 并没有为字典中的每个单词换行 而是在每个键
  • 使用 TFS 2015 .NET 客户端库从模板创建构建定义

    我正在使用 NET 客户端库VSTS TFS 2015 根据我在另一个团队项目中获取的模板以编程方式创建构建定义 我可以使用以下方法获取构建定义模板 2 0 BuildDefinitionTemplate builddeftemplate
  • 通过 std::bit_cast()ed 指针进行别名访问

    违反严格别名规则会产生未定义的行为 例如当通过网络将结构发送到 char 缓冲区时 然后该 char 指针是 C 风格 std reinterpret cast 转换为结构体指针 The C std bit cast 功能看起来它可以用来以
  • 带乳胶的轴刻度标签的无衬线字体

    我第一次尝试将 Latex 与 matplotlib 一起使用 似乎在使用 Latex 时 matplotlib 使用衬线字体作为轴标签 我尝试使用显式将字体系列设置为 sans serif rc font family sans seri
  • 如何更改 WPF 中 TextBox 的禁用背景颜色

    我看到以下与我的问题相关的线程 WPF ComboBox 禁用时的背景颜色 上面涉及更改内容模板ComboBox 我正在使用 WPF 对样式和模板有些陌生 我想更改禁用的暗灰色背景颜色TextBox到其他颜色 我们用TextBoxes在我们
  • 用于没有固定列的 HTML 动态布局的 CSS?

    我想设置这样的布局 两列都是动态的 一个由内容设置 第二个由第一列和最小宽度设置 我找到了许多解决方案 其中列的宽度是固定的 但它没有解决这个问题 看看我想要在屏幕上实现什么 我应该使用什么CSS 对于这样的东西有不同的方法 一个简单的方法
  • 将 vertex.label 放置在 igraph 中的圆形布局之外

    我有一个圆形布局 igraph 我希望顶点标签显示在圆形区域之外 尝试玩周围vertex label cex and vertex label degree但没有用 请指教 vertex label degree需要一些认真的 但简单的 调
  • matplotlib 动画保存不遵守 blit=True 但它似乎在 plt.show() 中工作得很好

    我对 Python 很陌生 正在尝试使用 matplotlib 对文本进行动画处理 使用几个在线示例得出以下代码 import matplotlib pyplot as plt import matplotlib animation as