Matplotlib 视频创建

2023-11-30

编辑:欧内斯特的重要性提供了答案,但是我仍然邀请大家解释,为什么savefig逻辑不同于animation logic.

我想制作视频matplotlib。我浏览了手册和示例,但我就是不明白。 (关于matplotlib,我总是复制示例,因为经过五年的python和两年的mathplotlib,我仍然理解0.0%的matplotlib语法)

六个小时后,这就是我的想法。好吧,我得到的是空视频。不知道为什么。

import os
import math
import matplotlib
matplotlib.use("Agg")
from matplotlib import pyplot as plt
import matplotlib.animation as animation

# Set up formatting for the movie files
Writer = animation.writers['ffmpeg']
writer = Writer(fps=15, metadata=dict(artist='Me'), bitrate=1800)

numb=100
temp=[0.0]*numb
cont=[0.0]*numb
for i in range(int(4*numb/10),int(6*numb/10)):
    temp[i]=2
    cont[i]=2

fig = plt.figure()
plts=fig.add_subplot(1,1,1)

plts.set_ylim([0,2.1])
plts.get_xaxis().set_visible(False)
plts.get_yaxis().set_visible(False)
ims = []

for i in range(1,10):
    line1, = plts.plot(range(0,numb),temp, linewidth=1, color='black')
    line2, = plts.plot(range(0,numb),cont, linewidth=1, color='red')
#    savefig is here for testing, works perfectly!
#    fig.savefig('test'+str(i)+'.png', bbox_inches='tight', dpi=300)
    ims.append([line1,line2])
    plts.lines.remove(line1)
    plts.lines.remove(line2)
    for j in range(1,10):
        tempa=0
        for k in range (1,numb-1):
            tempb=temp[k]+0.51*(temp[k-1]-2*temp[k]+temp[k+1])
            temp[k-1]=tempa
            tempa=tempb
        temp[numb-1]=0
    for j in range(1,20):
        conta=0
        for k in range (1,numb-1):
            contb=cont[k]+0.255*(cont[k-1]-2*cont[k]+cont[k+1])
            cont[k-1]=conta
            conta=contb
        cont[numb-1]=0

im_ani = animation.ArtistAnimation(fig, ims, interval=50, repeat_delay=3000,blit=True)
im_ani.save('im.mp4', writer=writer)

有人可以帮我弄这个吗?


如果你想要一个不为空的图,主要的想法是不要从图中删除线条。

也就是删除这两行

plts.lines.remove(line1)
plts.lines.remove(line2)

如果删除这两行,输出将如下所示

enter image description here [Link to orginial size animation]

现在有人可能会问,为什么我不需要在每个迭代步骤中删除艺术家,否则所有线条都会立即填充画布?

答案是 ArtistAnimation 负责处理这个问题。它只会显示提供的列表中与给定时间步相对应的艺术家。因此,在 for 循环结束时,您最终会将所有线条绘制到画布上,但一旦动画开始,它们将全部被删除,并且一次仅显示一组艺术家。

在这种情况下,使用循环来保存各个图像当然不是一个好主意,因为最终图像将同时包含所有绘制的线条,

enter image description here

然后,解决方案是运行两次脚本,一次用于动画,另一次在每个时间步中删除线条。或者,也许更好,使用动画本身来创建图像。

im_ani.save('im.png', writer="imagemagick") 

将创建图像为im-<nr>.png在当前文件夹中。需要安装 imagemagick。


I'm trying here to answer the two questions from the comments:

1.我在删除 line1 和 line2 之前附加了它们。但他们在最终结果中仍然消失了。怎么会?

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

Matplotlib 视频创建 的相关文章

  • Matplotlib 与多处理冻结计算机

    我对 matplotlib 和多重处理有疑问 我启动第一个进程 在其中显示图像并选择一个区域 然后关闭图形 然后我启动另一个进程 在其中调用定期更新的图形函数 至此 一切正常 然后 当我尝试使用相同的图形功能启动另一个进程时 它冻结了我的整
  • matplotlibplot_surface命令的颜色条

    我修改了mplot3d示例代码 http matplotlib sourceforge net examples mplot3d surface3d demo2 html在保罗的帮助下完成我的申请 代码如下 from mpl toolkit
  • 错误:未找到线条魔术函数“%matplotlib”

    我刚刚按照 anaconda 的说明在 Mac MacOS 10 7 5 上安装了 IPythonhttp ipython org install html http ipython org install html 没有明显的错误 我现在
  • 来自 pandas 数据帧的烛台图,用日期替换索引

    此代码给出了带有移动平均线的烛台图 但 x 轴位于索引中 我需要 x 轴位于日期中 需要做什么改变 import numpy as np import pandas as pd import matplotlib pyplot as plt
  • Matplotlib 图例,跨列添加项目而不是向下添加项目

    对于下面的简单绘图 有没有办法让 matplotlib 填充图例 以便它从左到右填充行 而不是第一列然后第二列 gt gt gt from pylab import gt gt gt x arange 2 pi 2 pi 0 1 gt gt
  • 使用 Python 绘制 USGS 水文数据甘特图?

    我编译了一个数据帧 其中包含几个不同流计的 USGS 流数据 现在我想创建一个类似的甘特图this https stackoverflow com questions 31820578 how to plot stacked event d
  • 如何在matplotlib中调整x轴

    I have a graph like this x轴上的数据表示小时 所以我希望x轴设置为0 24 48 72 而不是现在的值 很难看到 0 100 之间的数据 fig1 plt figure ax fig1 add subplot 11
  • 如何设置 plt.colorbar 中的刻度数?

    当我用颜色条绘制矩阵时 颜色条有 10 个刻度 由于颜色条必须非常小 因此刻度标签会重叠 因此我想将刻度数从 10 减少到 5 我不想减小字体大小 是否有捷径可寻 我不想手动设置刻度 The 最大N定位器 http matplotlib o
  • 填充两个函数之间的区域

    import matplotlib pyplot as plt import numpy as np def domain x np arange 0 10 0 001 f1 lambda x 2 x x 2 0 5 plt plot x
  • matplotlib 和地理数据图的纵横比

    我处理地理信息并使用以下方式呈现结果 matplotlib 所有输入都是纬度 经度 度 我转换成 x y 米 用于我的计算 我在中展示了我的结果 纬度 经度 问题是获得图形的纵横比 右 所有图表都太宽 是否有标准程序来设置 正确的纵横比 这
  • 如何在 pylab/pyplot 中裁剪极坐标图

    我有一个极坐标图 其中theta从 0 到 pi 2 变化 所以整个情节都在第一季度 如下所示 pylab inline X linspace 0 pi 2 polar X cos 6 X 2 source schurov com http
  • 使用 matplotlib 绘制简单的 3d numpy 数组

    我想绘制三维 ODE 系统的数值方法的结果 我的输出采用以下形式 假设我们已经计算了三个步骤 import numpy as np v np array 1 2 3 4 5 6 7 8 9 其中每个三元组中的第一个值是 x 坐标 第二个是
  • 绘制连接点的线

    我知道还有另一个非常类似的问题 但我无法从中提取我需要的信息 成对绘制线条 https stackoverflow com questions 17698824 plotting lines in pairs 我有4分 x y plane
  • 如何为 3D 网格线着色

    我正在寻找一种方法来更改 3D 绘图网格线的颜色 但无法找到一种干净且简单的方法来实现此目的 我找到的唯一答案是here https stackoverflow com questions 31684448 how to color a s
  • 设置`ylabel`的位置

    我正在尝试使用 matplotlib 重新创建下图的外观 但是 我对放置位置有疑问ylabel 我想要它在顶部y 轴 如图所示 我尝试过设置它的位置ax yaxis set label position 但这只接受left or right
  • 熊猫直方图 df.hist() 分组依据

    如何使用 group by 用 pandas DataFrame hist 绘制直方图 我有一个包含 5 列的数据框 A B C D 和 Group 有两个组类别 是 和 否 Using df hist 我获取了 4 列中每一列的历史记录
  • 如何将热图刻度标签映射到值并将这些值添加为图例

    我想在seaborn中创建一个热图 并且有一个很好的方式来查看标签 With ax figure tight layout 我正进入 状态 这显然很糟糕 Without ax figure tight layout 标签被裁剪 代码是 im
  • 在 Matplotlib 中选择标记大小

    我正在 matplotlib 中用方形标记绘制散点图 如下所示 我想实现这样的目标 这意味着我必须调整标记大小和图形大小 比例 以使标记之间没有空白 每个索引单元还应该有一个标记 x and y都是整数 所以如果y从 60 到 100 应该
  • 将滑块添加到 matplotlib 图表

    我有一个 matplotlib 代码 可以生成一个简单的 2D 图表 我想为 hte 和 hre 变量 它们是数组 添加滑块小部件 以便可以交互地增加或减少 hte 和 hre 值 有没有办法 我确信有 因为我已经看到了某物 http ma
  • 具有屏蔽无效值的 pcolormesh

    我试图将一维数组绘制为 pcolormesh 因此颜色沿 x 轴变化 但每个 x 的 y 轴保持不变 但我的数据有一些错误值 因此我使用屏蔽数组和自定义颜色图 其中屏蔽值设置为蓝色 import numpy as np import mat

随机推荐