我正在尝试保存matplotlib.animation.AnimationFunc的动画,但出现错误,提示缺少'dpi'参数。显然,我已经设置了dpi,所以我不知道此错误来自何处。
我正在运行python 3.6和matplotlib 3.0.3,我也刚刚从ubuntu官方存储库(Ubuntu 18.04)安装了ffmpeg。
这是我的代码中应该影响的部分,尽管我认为这应该是系统的一部分:
Writer = writers['ffmpeg']
writer = Writer(fps=15, metadata=dict(artist='Me'), bitrate=1800,)
ani = FuncAnimation(fig, anime, interval=time_step *
10**3, frames=F, repeat=False,)
ani.save('standard_map.mp4', writer=Writer, dpi=100)
错误是:
with writer.saving(self._fig, filename, dpi):
File "/usr/lib/python3.6/contextlib.py", line 159, in helper
return _GeneratorContextManager(func, args, kwds)
File "/usr/lib/python3.6/contextlib.py", line 60, in __init__
self.gen = func(*args, **kwds) TypeError: saving() missing 1 required positional argument: 'dpi'
我都尝试添加他们在此处建议的行,并且错误仍然相同。
plt.rcParams['animation.ffmpeg_path'] = '/usr/bin/ffmpeg'
我还尝试将编写器更改为默认情况下在Ubuntu上设置的'imagemagick',并且错误仍然存在。
答案 0 :(得分:1)
没有将dpi参数传递给ani.save()
,请提供它:
ani.save('standard_map.mp4', writer=Writer, dpi=100)
答案 1 :(得分:0)
这对我有用:
writer = animation.FFMpegFileWriter(fps=15, metadata=dict(artist='Me'), bitrate=1800)
对于MACOS,您需要blit=False
。
答案 2 :(得分:0)
我尝试使用matplotlib文档中的示例重现该问题:
kafka-console-consumer.sh --bootstrap-server INTERNAL://0.0.0.0:9093 --topic greetings --from-beginning
{"name":"Alice","message":"Namastey"}
这确实会给您上述例外:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import matplotlib.animation as animation
fig, ax = plt.subplots()
xdata, ydata = [], []
ln, = plt.plot([], [], 'ro')
def init():
ax.set_xlim(0, 2*np.pi)
ax.set_ylim(-1, 1)
return ln,
def update(frame):
xdata.append(frame)
ydata.append(np.sin(frame))
ln.set_data(xdata, ydata)
return ln,
writers = animation.writers
writer = writers['ffmpeg']
ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128),
init_func=init, blit=True)
ani.save("test.mp4",writer=writer)
有一个简单的解决方案:您需要writer的实例,而不是writer类本身。因此,替换
TypeError: saving() missing 1 required positional argument: 'dpi'
与
writer = writers['ffmpeg']
答案 3 :(得分:0)