【发布时间】:2021-06-07 10:14:05
【问题描述】:
我正在尝试在 matplotlib 中一次为多行设置动画。为此,我遵循 matplotlib.animation 文档中的教程:
https://matplotlib.org/stable/api/animation_api.html
本教程的想法是创建一条线ln, = plt.plot([], [])并使用ln.set_data更新该线的数据以生成动画。虽然当线数据是n个数据点的一维数组(形状=(n,))时这一切都很好,但当线数据是二维数组(形状=(n,k))时我遇到了麻烦要绘制的 k 条线。
更准确地说,plt.plot 接受数组作为输入,每列对应于要绘制的新线。这是一个简单的例子,用一个 plt.plot 调用绘制了 3 条线:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi, 100).reshape(-1, 1)
x = np.concatenate([x] * 3, axis=1)
# generate 3 curves
y = np.copy(x)
y[:, 0] = np.cos(y[:, 0])
y[:, 1] = np.sin(y[:, 1] )
y[:, 2] = np.sin(y[:, 2] ) + np.cos(y[:, 2])
fig, ax = plt.subplots()
plt.plot(x,y)
plt.show()
但是,如果我尝试使用 .set_data 来设置生成动画所需的数据,我会遇到问题:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi, 100).reshape(-1, 1)
x = np.concatenate([x] * 3, axis=1)
# generate 3 curves
y = np.copy(x)
y[:, 0] = np.cos(y[:, 0])
y[:, 1] = np.sin(y[:, 1] )
y[:, 2] = np.sin(y[:, 2] ) + np.cos(y[:, 2])
fig, ax = plt.subplots()
p, = plt.plot([], [], color='b')
p.set_data(x, y)
plt.show()
有没有办法set_data 用于二维数组?虽然我知道我可以创建三个绘图 p1, p2, p3 并在每个循环上调用 set_data,但我的真实数据包含 1000-10,000 行来绘制,这使得动画太慢了。
非常感谢您的帮助。
【问题讨论】:
标签: python numpy matplotlib matplotlib-animation