애니메이션을 gif 형식으로 내보내려고합니다. mp4를 사용하여이 작업을 수행 할 수 있지만 gif로 변환 할 때 오류가 발생합니다. 스크립트가 잘못되었거나 일부 백엔드 설정인지 확실하지 않습니다.
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import animation
df1 = pd.DataFrame({
'Time' : [1,1,1,2,2,2,3,3,3],
'GroupA_X' : [3, 4, 5, 12, 15, 16, 21, 36, 47],
'GroupA_Y' : [2, 4, 5, 12, 15, 15, 22, 36, 45],
'GroupB_X' : [2, 5, 3, 12, 14, 12, 22, 33, 41],
'GroupB_Y' : [2, 4, 3, 13, 13, 14, 24, 32, 45],
})
fig, ax = plt.subplots()
ax.grid(False)
ax.set_xlim(0,50)
ax.set_ylim(0,50)
def groups():
Group_A = df1[['Time','GroupA_X','GroupA_Y']]
GA_X = np.array(Group_A.groupby(['Time'])['GroupA_X'].apply(list))
GA_Y = np.array(Group_A.groupby(['Time'])['GroupA_Y'].apply(list))
GA = ax.scatter(GA_X[0], GA_Y[0], c = ['blue'], marker = 'o', s = 10, edgecolor = 'black')
return GA, GA_X, GA_Y
def animate(i) :
GA, GA_X, GA_Y = groups()
GA.set_offsets(np.c_[GA_X[0+i], GA_Y[0+i]])
ani = animation.FuncAnimation(fig, animate, np.arange(0,3), interval = 1000, blit = False)
# If exporting as an mp4 it works fine.
#Writer = animation.writers['ffmpeg']
#writer = Writer(fps = 10, bitrate = 8000)
#ani.save('ani_test.mp4', writer = writer)
#But if I try to export as a gif it returns an error:
ani.save('gif_test.gif', writer = 'imagemagick')
오류:
MovieWriter imagemagick unavailable. Trying to use pillow instead.
self._frames[0].save(
IndexError: list index out of range
참고 : 나는 또한 동일한 결과를 반환하는 다음을 시도했습니다. Index error
my_writer=animation.PillowWriter(fps = 10)
ani.save(filename='gif_test.gif', writer=my_writer)
다른 질문 animate gif 에서 수많은 설정을 조정 해 보았습니다 . 내 현재 애니메이션 설정은 다음과 같습니다. Mac을 사용하고 있습니다.
###ANIMATION settings
#animation.html : none ## How to display the animation as HTML in
## the IPython notebook. 'html5' uses
## HTML5 video tag; 'jshtml' creates a
## Javascript animation
#animation.writer : imagemagick ## MovieWriter 'backend' to use
#animation.codec : mpeg4 ## Codec to use for writing movie
#animation.bitrate: -1 ## Controls size/quality tradeoff for movie.
## -1 implies let utility auto-determine
#animation.frame_format: png ## Controls frame format used by temp files
#animation.html_args: ## Additional arguments to pass to html writer
animation.ffmpeg_path: C:\Program Files\ImageMagick-6.9.1-Q16\ffmpeg.exe ## Path to ffmpeg binary. Without full path
## $PATH is searched
#animation.ffmpeg_args: ## Additional arguments to pass to ffmpeg
#animation.avconv_path: avconv ## Path to avconv binary. Without full path
## $PATH is searched
#animation.avconv_args: ## Additional arguments to pass to avconv
animation.convert_path: C:\Program Files\ImageMagick-6.9.2-Q16-HDRI ## Path to ImageMagick's convert binary.
## On Windows use the full path since convert
## is also the name of a system tool.
#animation.convert_args: ## Additional arguments to pass to convert
#animation.embed_limit : 20.0
구성한 경로,
animation.ffmpeg_path: C:\Program Files\ImageMagick-6.9.1-Q16\ffmpeg.exe
과
animation.convert_path: C:\Program Files\ImageMagick-6.9.2-Q16-HDRI
Windows 용이지만 Mac 용이므로 MacOS 용 경로가 필요합니다. which
터미널에서 사용할 수 있어야합니다 . 내 Ubuntu 설치 which
에서 다음을 제공합니다.
>$ which convert
/usr/bin/convert
>$ which ffmpeg
/usr/bin/ffmpeg
MacOS에서도 비슷해야합니다. 사람들은 rcParams에 공급해야하는 경로입니다 animation.convert_path
및 animation.ffmpeg_path
예
animation.ffmpeg_path: /usr/bin/ffmpeg
animation.convert_path: /usr/bin/convert
matplotlib 구성에 잘못된 경로가 있으면 문제의 오류가 발생하지만 수정하면 오류가 해결되지 않을 수 있습니다. 다른 문제가있을 수도 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다