我想在matplotlib动画中同时绘制多个数据集。这可能吗?每个数据集都是(x,y)坐标的数组,因此我希望通过动画来循环(x,y)坐标,并不断更新直到数组结束。对于单个数据集来说,它是直截了当的,但是我遇到的问题不止一个。任何帮助将不胜感激。
这是我的问题;
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
def update_line(num, data, line):
line.set_data(data[...,:num])
return line,
fig1 = plt.figure()
data1 = np.random.rand(2, 25)
data2 = np.random.rand(2, 25)
l, = plt.plot([], [], 'r-')
plt.xlim(0, 1)
plt.ylim(0, 1)
plt.xlabel('x')
plt.title('test')
line_ani = animation.FuncAnimation(fig1, update_line, 25, fargs=(data, l),interval=50, blit=False)
plt.show()
这适用于仅绘制第一个数据集,但是我不知道如何将data1和data2一起绘制(并且将来我希望在同一个动画上有10个数据集)。我只是不太了解update_line函数,如果有人可以给我一个答案,它会清除我脑海里的很多东西。
答案 0 :(得分:1)
动画功能每帧仅调用一次,因此您必须确保在一次调用中更新两个图。
例如:
def update_lines(num, data1, data2, line1, line2):
line1.set_data(data1[...,:num])
line2.set_data(data2[...,:num])
return line1,line2
data1 = np.random.rand(2, 25)
data2 = np.random.rand(2, 25)
fig1 = plt.figure()
ax1 = fig1.add_subplot(121)
ax2 = fig1.add_subplot(122)
l1, = ax1.plot([], [], 'r-')
l2, = ax2.plot([], [], 'g-')
for ax in (ax1, ax2):
ax.set_xlim(0, 1)
ax.set_ylim(0, 1)
ax.set_xlabel('x')
ax.set_title('test')
line_ani = animation.FuncAnimation(fig1, update_lines, 25, fargs=(data1, data2, l1, l2),interval=50, blit=False)