我将从Arduino真实的收集数据,并尝试找到一种方法,在数据进入时在pyplot条形图上显示数据的更新。下面的示例代码是我希望实现的简化版本,但FuncAnimation方法太慢,或者至少是,我没有正确地使用它。我真的希望一次更新所有500个点,而不是每毫秒一次更新一个点,因为在实际应用中,一组新的数据将以每10毫秒一次的速度进入。
如果有人能指出如何更好地利用动画(或提出一个完全不同的方法),我将非常感谢。提前感谢。
import numpy as np
from matplotlib import animation as animation, pyplot as plt, cm
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
fig = plt.figure()
x = np.linspace(1,500,num=500)
counts = np.random.randint(0, 100, size=500)
bars = plt.bar(x, counts, facecolor='green', width=1)
def animate(frame):
global bars
counts = np.random.randint(0, 100, size=500)
for i in range(len(counts)):
bars[frame].set_height(counts[i])
ani = animation.FuncAnimation(fig, animate, frames=len(x), interval = 1)
plt.xlabel("Time (ms)")
plt.ylabel("Counts")
plt.title("Window Counts")
plt.ylim([0,100])
plt.xlim([0,500])
plt.show()
1条答案
按热度按时间ippsafx71#
在chrslg的帮助下,我能够让这个完全按照我想要的方式工作。事实上,bars[].set_height调用是使用FuncAnimation中的“frame”作为索引的。我真正想要的是使用我的for循环中的索引作为bars[].set_height的索引,并将FuncAnimation中的frames设置为1。这样,整个图表将每毫秒用新的随机值更新一次。这正是我想要的