2015-12-11 46 views
1

我嘗試使用下面的代碼來生成動畫:爲什麼UnicodeDecodeError在保存matplotlib動畫時?

import numpy as np 
import matplotlib 
import matplotlib.pyplot as plt 
from matplotlib.animation import ArtistAnimation 

fig = plt.figure() 
ax = fig.add_subplot(111) 

ax.set_xlim(0, 1) 
ax.set_ylim(-2,2) 

dt = 0.01 
q = 0.01 
t = np.arange(0,1,dt) 
x = np.sin(2*np.pi*t) 
images = [] 

for i in xrange(100): 
    x = (1-q) * x + q* np.random.normal(size = len(t)) 
    line, = ax.plot(t,x, '-') 
    images.append((line,)) 

line_anim = ArtistAnimation(fig, images, interval=50, blit=True) 

#line_anim.save('my_animation.mp4') 
#line_anim.save('my_animation.gif') 

plt.show() 

它工作正常。我看到了我期望看到的動畫。但是,如果我嘗試將其保存到``MP4 or gif`文件(通過取消註釋代碼的相應行)我收到以下錯誤信息:

UnicodeDecodeError: 'ascii' codec can't decode byte 0x84 in position 5: ordinal 
not in range(128) 

有誰知道發生了什麼還有如何問題可以解決?

回答

0

該文檔說,如果您沒有在Animation.save中指定專用寫入器,它將使用animation.writer的rcParam值。我假設你的matplotlib安裝沒有爲該參數指定正確的值,因此錯誤。嘗試使用運行

ani = matplotlib.animation.FuncAnimation(...) 
ani.save("out.gif", writer="imagemagick", dpi=80,fps=10) 
在Windows機器上

line_anim.save('my_animation.mp4', writer = 'ffmpeg') 
+0

不幸的是,它沒有幫助。我仍然得到相同的錯誤:'UnicodeDecodeError:'ascii'編解碼器無法解碼位置5中的字節0x84' – Roman

0

我碰到了同樣的問題來了:

你應該save方法指定一個作家(反正控制你matplotlib安裝) matplotlib 1.5。

問題是matplotlib想調用imagemagick的二進制文件convert。但是,在Windows中有另一個標準工具convert可用,它被調用,而其輸出會導致此unicode錯誤。爲了防止這種情況發生,imagemagick轉換的完整路徑需要通過"animation.convert_path" rcparam提供給matplotlib。

import matplotlib.pyplot as plt 
plt.rcParams["animation.convert_path"] = r"D:\Programs\ImageMagick\convert.exe" 
              #or whatever the full path is.