我有一些数据系列,我想另存为视频。不同的数据系列应该一个接一个地出现,保持前一个系列。最后,所有系列都显示在图中。我想以同步的方式对多个数据系列/子图进行此操作。我希望子图具有不同的大小,因此-据我所知-我需要使用GridSpec进行此操作。但是,使用GridSpec时,我无法在添加新序列的同时保留旧序列(我仅获得最后一个数据序列)。
我的代码示例是(显示原理-我的实际脚本更复杂): 使用索引/位置(但在子图上仅相等):
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as anim
figure = plt.figure()
data = np.array([1,2,3,4,5])
set = np.array([1,2,3,4])
def make_frame(i):
ax1 = plt.subplot(121)
x = data
y = i*x
ax1.set_ylim(0,25)
ax1.plot(x,y)
ax2 = plt.subplot((122), sharey = ax1)
a = data*2
b = i/x*3
ax2.plot(a,b)
plt.pause(1)
ani = anim.FuncAnimation(figure, make_frame, frames = set, repeat = False)
plt.show()
不保留旧系列(但可以调整每个图的列数/行数):
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as anim
from matplotlib.gridspec import GridSpec
figure = plt.figure()
data = np.array([1,2,3,4,5])
set = np.array([1,2,3,4])
print(data,set)
def make_frame(i):
gs1 = GridSpec(1,2)
ax1 = plt.subplot(gs1[0,0])
x = data
y = i*x
ax1.plot(x,y)
ax2 = plt.subplot(gs1[0,1], sharey = ax1)
a = data
b = i/x*3
ax2.plot(a,b)
ax1.set_ylim(0,25)
plt.pause(0.5)
ani = anim.FuncAnimation(figure, make_frame, frames = set, repeat = False)
plt.show()
如何在GridSpec解决方案中保留“绘图历史记录”?
答案 0 :(得分:0)
您需要定义动画功能的gridspec和外部子图。否则,将为每个帧从头开始重新创建它们。
此外,请勿在动画中使用plt.pause
,而应使用interval
参数。并且不要将python函数的名称(set
)用作变量名称。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as anim
from matplotlib.gridspec import GridSpec
data = np.array([1,2,3,4,5])
seti = np.array([1,2,3,4])
gs1 = GridSpec(1,2)
figure = plt.figure()
ax1 = plt.subplot(gs1[0,0])
ax2 = plt.subplot(gs1[0,1], sharey = ax1)
ax1.set_ylim(0,25)
print(data,seti)
def make_frame(i):
x = data
y = i*x
ax1.plot(x,y)
a = data
b = 3.*i/x
ax2.plot(a,b)
ani = anim.FuncAnimation(figure, make_frame, frames = seti,
interval =500, repeat = False)
plt.show()