2017-04-10 17 views
1

matplotlib를 사용하여 동영상을 만드는 데 관심이 있습니다. 예를 들어 this one for moviewriter과 같이 지금까지 본 적이있는 예는 각 프레임의 데이터를 내부 편집하는 것처럼 보입니다. 이는 매번 동일하게 유지되는 이미지 부분을 다시 그리지 않아도되므로 매우 효율적입니다. 그러나 빠른 데이터 탐색을 위해서는 어색 할 수 있습니다. 저는 각 프레임으로 완전히 그려진 그림을 간단하게 가져갈 수있는 제조법을 원합니다 (매번 같은 그림 개체를 지우는 것이 좋습니다).Matplotlib 동영상은 setData를 사용하지 않고 그림 전체를 완성합니다.

이유 : 사용자 정의 함수를 사용하여 보통 복잡한 숫자를 작성하는 경우가 있습니다 (예 : plotme(ax, data, **options)). 종종 애니메이션없이 이러한 기능을 개발하고 나중에 루프에서 플로팅 기능을 호출하여 그림을 애니메이션으로 만들려고합니다. 각 프레임의 기존 아티스트의 "setData"기능을 변경하지 않아도됩니다.

+0

아무것도 개체를하지 않습니다. 현재 그림을 캡쳐하고 싶을 때마다'writer.grab_frame()'이 필요하다. – Suever

답변

2

표시 한 예제 코드는 기존의 플롯 객체를 업데이트하지만 그렇게해야하는 이유는 없습니다. 첨부 된 코드의 핵심 부분은 단순히 현재 그림의 화면 캡처를 얻는 writer.grab_frame()입니다. 여기

기존 플롯을 사용하지 않고 예입니다 그 코드는 플롯 객체를 재사용하도록 요구에 대해

import matplotlib 
matplotlib.use("Agg") 
import matplotlib.pyplot as plt 
import matplotlib.animation as manimation 

FFMpegWriter = manimation.writers['ffmpeg'] 
metadata = dict(title='Movie Test', artist='Matplotlib', 
       comment='Movie support!') 
writer = FFMpegWriter(fps=15, metadata=metadata) 

fig = plt.figure() 

with writer.saving(fig, "writer_test.mp4", 100): 
    for k in range(10): 
     # Create a new plot object 
     plt.plot(range(k), range(k), 'o') 
     writer.grab_frame()