2016-10-11 3 views
0

플롯에서 데이터를 지속적으로 업데이트하는 실시간 플롯에서 영화를 만들고 싶습니다. 원본 코드가 너무 길고 복잡하므로 원래 데이터를 간단한 코드로 바꿔서 동영상 저장시 문제에 집중하십시오. 실시간 그래프 표시Python 3.6 - 실시간 플롯에서 영화 저장 - 영화의 그림 윈도우가 위로 이동합니다.

1.) 잘 작동

2) 또한 잘 작동 아래의 코드와 디스플레이 실시간 플롯없이 영화를() 저장

3)! 그러나 실시간으로 플로팅 및 저장하는 동시에 영화를 제작하면 영화의 그림 창이 천천히 위로 움직입니다 !!!

이 문제의 원인은 무엇입니까?

영화의 스크린 샷의 링크 : https://i.stack.imgur.com/1xWcM.jpg

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.animation as manimation 

# we generate some synthetic data. 
# we will make a list of X, Y lists. 
# the original code use for generating data is too long and complex to show here 
frames = [] 
frameNumber = 240 # we generate 240 different frames 

for i in range(0, frameNumber): 
    xData = np.linspace(0, 2 * np.pi) 
    yData = np.sin(xData - i * 2.0 * np.pi/frameNumber) 
    frames.append([xData, yData]) 
    print('frameNumber: ', i) 

# now we put them together to make a movie! let's set up the movie writer 
framerate = 60       # 24 frames per second 
# FFMpegWriter = manimation.writers['avconv'] 
FFMpegWriter = manimation.writers['ffmpeg'] 
metadata = dict(title='Wave Data', artist='Isaac Newton', comment='') 
writer = FFMpegWriter(fps=framerate, metadata=metadata) 

# figure setup 
fig,ax = plt.subplots() 
firstFrameX, firstFrameY = frames[0] 
l, = ax.plot(firstFrameX, firstFrameY, '-') 

plt.ylabel(r'$x$ axis') 
plt.xlabel(r'$y$ axis') 
plt.xlim(0, 2 * np.pi) 
plt.title(r'$\lambda = 2 \pi$') 

# --- without displaying ---> comment next 2 lines 
fig.show() 
fig.canvas.draw() 
# ------------------------------------------------ 

# let's write to the file! 
with writer.saving(fig, "anim.mp4", 100): 
    for i in range(frameNumber): 
     x, y = frames[i] 
     l.set_data(x, y) 

     # --- without displaying ---> comment next 4 lines 
     ax.draw_artist(ax.patch) 
     ax.draw_artist(l) 
     fig.canvas.update() 
     fig.canvas.flush_events() 
     # ------------------------------------------------ 
     writer.grab_frame() 

답변

0

는 파이썬 2.7에서 matplotlib.animation를 사용하여 유사한 문제가 있었다.

새로운 콘솔에서 처음 실행하면 내 영화는 괜찮지 만 스크립트를 다시 실행하면 스크린 샷과 마찬가지로 결과 동영상이 위쪽으로 이동하게됩니다.

콘솔을 다시 시작하면 문제가 해결되지만 매우 편리합니다.

스크립트 끝 부분에 plt.close (그림)를 추가하여 문제를 해결했습니다.

그러나 처음에는 정확히 무엇이 원인인지 이해하지 못합니다.