- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我一直在尝试使用有限元方法为我为二维热流问题创建的一系列曲面图制作动画。在每个时间步,我都保存了一个图而不是整个矩阵,以提高效率。
我在使用 matplotlib.animation 库中的 FuncAnimation
时遇到了问题,所以我决定每次都渲染一个表面图,将表面图保存为 .png 文件,然后读取该图像使用 pyplot.imread
。从那里,我想将每个图像存储到一个列表中,以便我可以使用 ArtistAnimation (example)。然而,它并没有制作动画,而是在我将 imgplot
打印到屏幕上时,我得到了两个单独的空白图,然后是我的表面图 .pngs。
此外,当我尝试保存动画时,出现以下错误消息:
AttributeError: 'module' object has no attribute 'save'.
对于从当前目录读取一组 .png,将它们保存在列表中,然后使用 ArtistAnimation 为这些 .png“制作动画”的任何帮助,我们将不胜感激。我不需要任何花哨的东西。
(注意 - 我必须使代码自动化,所以不幸的是我不能使用外部源来为我的图像制作动画,如 iMovie 或 ffmpeg。)
下面是我的代码:
from numpy import *
from pylab import *
import matplotlib.pyplot as plt
import matplotlib.image as mgimg
from matplotlib import animation
## Read in graphs
p = 0
myimages = []
for k in range(1, len(params.t)):
fname = "heatflow%03d.png" %p
# read in pictures
img = mgimg.imread(fname)
imgplot = plt.imshow(img)
myimages.append([imgplot])
p += 1
## Make animation
fig = plt.figure()
animation.ArtistAnimation(fig, myimages, interval=20, blit=True, repeat_delay=1000)
animation.save("animation.mp4", fps = 30)
plt.show()
最佳答案
问题一:图片不显示
您需要将动画对象存储在一个变量中:
my_anim = animation.ArtistAnimation(fig, myimages, interval=100)
此要求特定于动画
,与matplotlib
中的其他绘图功能不一致,您通常可以在其中使用my_plot=plt.plot()
或 plt.plot()
无所谓。
这个问题进一步讨论here .
问题 2:保存不起作用
如果没有任何animation
实例,也无法保存图形。这是因为 save
方法属于 ArtistAnimation
类。您所做的是从 animation
模块调用 save
,这就是引发错误的原因。
问题 3:两个窗口
最后一个问题是您会弹出两个数字。原因是当您调用 plt.imshow()
时,它会在当前图形上显示图像,但由于尚未创建图形,因此 pyplot
隐式创建一个你。当 python 稍后解释 fig = plt.figure()
语句时,它会创建一个新图形(另一个窗口)并将其标记为“图 2”。将此语句移至代码开头即可解决该问题。
修改后的代码:
import matplotlib.pyplot as plt
import matplotlib.image as mgimg
from matplotlib import animation
fig = plt.figure()
# initiate an empty list of "plotted" images
myimages = []
#loops through available png:s
for p in range(1, 4):
## Read in picture
fname = "heatflow%03d.png" %p
img = mgimg.imread(fname)
imgplot = plt.imshow(img)
# append AxesImage object to the list
myimages.append([imgplot])
## create an instance of animation
my_anim = animation.ArtistAnimation(fig, myimages, interval=1000, blit=True, repeat_delay=1000)
## NB: The 'save' method here belongs to the object you created above
#my_anim.save("animation.mp4")
## Showtime!
plt.show()
(要运行上面的代码,只需将 3 张图像添加到您的工作文件夹中,名称为“heatflow001.png”到“heatflow003.png”。)
使用 FuncAnimation
的替代方法
当您第一次尝试使用 FuncAnimation
时,您可能是对的,因为在列表中收集图像会占用大量内存。我通过比较内存使用情况来测试下面的代码和上面的代码系统监视器。 FuncAnimation
方法似乎更有效。我相信随着您使用更多图像,差异会变得更大。
这是第二个代码:
from matplotlib import pyplot as plt
from matplotlib import animation
import matplotlib.image as mgimg
import numpy as np
#set up the figure
fig = plt.figure()
ax = plt.gca()
#initialization of animation, plot array of zeros
def init():
imobj.set_data(np.zeros((100, 100)))
return imobj,
def animate(i):
## Read in picture
fname = "heatflow%03d.png" % i
## here I use [-1::-1], to invert the array
# IOtherwise it plots up-side down
img = mgimg.imread(fname)[-1::-1]
imobj.set_data(img)
return imobj,
## create an AxesImage object
imobj = ax.imshow( np.zeros((100, 100)), origin='lower', alpha=1.0, zorder=1, aspect=1 )
anim = animation.FuncAnimation(fig, animate, init_func=init, repeat = True,
frames=range(1,4), interval=200, blit=True, repeat_delay=1000)
plt.show()
关于python - 使用 ArtistAnimation 在 matplotlib 中动画化 png,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23176161/
我正在尝试学习 Matplotlib 的一些动画功能。 考虑一下尝试绘制正弦和余弦曲线振幅增加的动画的尝试。 import numpy as np import matplotlib.pyplot a
考虑以下实现 ArtistAnimation 的代码对同一图形对象中的两个不同的子图进行动画处理。 import numpy as np import itertools import matplot
我正在尝试制作随时间变化的 networkx 图的动画。我正在使用 networkx_draw 实用程序来创建图表的 matplotlib 图形,并使用 matplotlib 的 ArtistAnim
我一直在使用 matplotlib 来创建绘图,但现在才发现 animation选项。我想使用 animation.ArtistAnimation 在动画中显示一系列图(不仅仅是单个元素) . 不幸的
我正在尝试用 Python 编写 Conway 的生命游戏并展示进化过程。我无法显示输出。我在下面粘贴了我的整个代码。 我以这个例子为基础:from the matplotlib doc .我的动画是
我正在尝试使用以下代码创建动画,但我无法让它工作。 def plotSimulation(currentState, startState): import matplotlib.pyplot
我有几张图像作为二维数组,我想为这些图像创建动画并添加随图像变化的文本。 到目前为止,我已经成功制作了动画,但我需要你的帮助来向每张图片添加文本。 我有一个 for 循环来打开每个图像并将它们添加到动
我正在尝试使用 ArtistAnimation 来创建动画。一切正常,除了 set_title 不工作。我不明白为什么 blit=False 不起作用。 我需要去 FuncAnimation 吗? ?
我正在进行图像分析,我想创建最终结果的动画,其中包括二维数据的时间序列和单个像素的时间序列图,以便一维图更新为二维动画进展。然后将它们并排放置在一个子图中。下面的链接有一张最终结果的图片,最好是动画效
我想做的是创建一个动画,其中图形的节点随时间改变颜色。当我在 matplotlib 中搜索有关动画的信息时,我通常会看到类似这样的示例: #!/usr/bin/python import numpy
我一直在尝试使用有限元方法为我为二维热流问题创建的一系列曲面图制作动画。在每个时间步,我都保存了一个图而不是整个矩阵,以提高效率。 我在使用 matplotlib.animation 库中的 Func
我正在尝试调用 matplotlib.animation.ArtistAnimation 以从一系列 png 图像制作动画,但我收到一个与 ffmpeg 相关的错误。我在我的 Ubuntu 14.04
因此,在matplotlib.animation的示例中,有两个主要用于制作动画的函数:AritstAnimation和FuncAnimation。 根据文档,它们各自的用途是: .ArtistAni
这个问题在这里已经有了答案: matplotlib imshow(): how to animate? (2 个答案) 关闭 6 年前。 你能帮我弄清楚这里的问题是什么吗?我不知道出了什么问题。 i
我使用 plt.plot_surface() 和 plt.scatter() 创建了一系列 3D 图像,如下所示: 我想将它们另存为 .gif。正在关注this example我能够循环浏览视角并收集
我是一名优秀的程序员,十分优秀!