gpt4 book ai didi

python - Matplotlib 动画无法正确保存

转载 作者:太空宇宙 更新时间:2023-11-03 17:20:44 24 4
gpt4 key购买 nike

我正在编写一个脚本,该脚本可在一系列数据点上沿 x 轴移动垂直线。动画与 plt.show 配合良好,但我在输出电影文件时遇到问题。请注意,尽管我已经使用 Python 一两年了,但我对 Python 还很陌生。该脚本是通过组合 this tutorial 中的第一个脚本创建的。使用 this previous stack overflow question 的答案中提供的脚本。该线最终将在静态数据折线图上移动,我在这里将其显示为对角线。

电影文件输出为具有正确的时间长度(1 分钟,10 秒),但是应该以每秒 1 点的速度从最左侧移动到最右侧的线条仅移动了图像中的几个像素。输出视频。

如果您能为解决此问题提供任何帮助,我们将不胜感激。

编辑:我在 Ubuntu 14.04 上运行 Python 2.7.6。

这是我的可重现代码:

import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation
import time

# Simulated background data
x = np.linspace(0,61,62)
y = np.linspace(0,6,62)

# Set up the figure, the axis, and the plot element we want to animate
max_height = 6 # max height of y-axis
n_pts = 61 # max length of x-axis

# Original location for progress line
y1 = [0, max_height]
x1 = [0, 0]

fig = plt.figure() # Initialize figure
#ax = fig.add_subplot(111) # Intialize axes
ax = plt.axes(xlim=(0, n_pts), ylim=(0, max_height)) # Set axes limits
line, = ax.plot([], [], lw=2) # Initialize line

# draw the data to the 'background'
line1, = ax.plot(x, y, color='black')

# initialization function: plot the background of each frame
def init():
line.set_data(x1, y1)
return line,

starttime=time.time()
mytimer=0
mytimer_ref=0

# animation function. This is called sequentially
def animate(i):
t = time.time() - starttime
mytimer = t + mytimer_ref
x1 = [mytimer,mytimer]
line.set_data(x1, y1)
return line,

# call the animator.
anim = animation.FuncAnimation(fig, animate, init_func=init,
frames=61, interval=1000)

# save the animation as an mp4. This requires ffmpeg or mencoder to be
# installed. The extra_args ensure that the x264 codec is used, so that
# the video can be embedded in html5. You may need to adjust this for
# your system: for more information, see
# http://matplotlib.sourceforge.net/api/animation_api.html

writer = animation.writers['ffmpeg'](fps=1)

anim.save('demo.mp4',writer=writer,dpi=dpi)

plt.show()

编辑 以下脚本创建影片并将其另存为 mp4。现在的问题是,虽然有61帧动画,但我不能让电影停在那里。每次都会进行到 100 帧。我知道这个问题现在有点老了,但是非常感谢任何帮助!

我尝试手动设置 x 轴,这限制了屏幕上显示的内容,但动画仍然超出了显示的轴。

import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation
from time import time
from scipy.interpolate import interp1d

max_height = 6 # max height of y-axis
n_pts = 62 # max length of x-axis

x = np.linspace(0,61,62)
y = np.linspace(0,6,62)

# New figure with white background
fig = plt.figure(facecolor = 'white')
ax = plt.axes(aspect=1) # Set axes limits

# Original location for progress line
y1 = [0, max_height]
x1 = [0, 0]

# initialize line
plt.plot(x, y) #plot background
line, = ax.plot([], [], lw=2)

def update(frame):
x1 = frame
line.set_data(x1, y1)

# Return the modified line
return line,

anim = animation.FuncAnimation(fig, update, interval=1000, blit=True)
anim.save('line.mp4', writer='ffmpeg')
plt.show()

最佳答案

对于您编辑的代码,请在对 animation.FuncAnimation 的调用中包含两个附加参数:

  1. frames=25(选择25作为示例)- 再次设置最大帧数
  2. repeat=False - 在达到最大帧数后不重复动画

结合起来,你会得到这个命令:

anim = animation.FuncAnimation(fig, update, frames=25,
interval=1000, blit=True, repeat=False)

这会产生一个动画,该动画步进 25 帧(在您的情况下,以一秒的间隔将垂直线从 0 移动到 24) - 并在那里停止。

关于python - Matplotlib 动画无法正确保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33181699/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com