플롯에서 데이터를 지속적으로 업데이트하는 실시간 플롯에서 영화를 만들고 싶습니다. 원본 코드가 너무 길고 복잡하므로 원래 데이터를 간단한 코드로 바꿔서 동영상 저장시 문제에 집중하십시오. 실시간 그래프 표시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()