matplotlib 动画多个数据集

Posted

技术标签:

【中文标题】matplotlib 动画多个数据集【英文标题】:matplotlib animation multiple datasets 【发布时间】:2015-11-23 05:19:03 【问题描述】:

我有多个要在 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 函数在做什么,如果有人能给我一个答案,那我的脑海里就会清楚很多事情。

【问题讨论】:

【参考方案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)

【讨论】:

以上是关于matplotlib 动画多个数据集的主要内容,如果未能解决你的问题,请参考以下文章

用Python Matplotlib 制作动画

Tkinter + matplotlib 动画填充内存

如何使用 matplotlib blitting 将 matplot.patches 添加到 wxPython 中的 matplotlib 图?

matplot:在matplotlib中显示标签的问题[重复]

matplotlib可视化篇之并列柱状图--直方图(3)

python matplot怎么画箭头