matplotlib анимация нескольких наборов данных

У меня есть несколько наборов данных, которые я хочу отображать одновременно в анимации 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()

Это отлично работает для построения только первого набора данных, однако я не знаю, как построить вместе данные1 и данные2 (и в будущем я хотел бы иметь 10 наборов данных для одной и той же анимации). Я просто не очень понимаю, как работает функция update_line, если бы кто-нибудь мог дать мне ответ на этот вопрос, это многое прояснило бы для меня.


person obtmind    schedule 28.08.2015    source источник


Ответы (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)
person Diziet Asahi    schedule 29.08.2015