我从麦克风收到一堆实时数据。 数据集的长度为4000,每秒接收5次。
我使用python2.7和matplotlib。要了解数据集的概念:
如果安静
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, -2, 0, -1, 0, 0, 0, -1, 1, -2, 0, -2, -2, -8, -1, -1, 0, -2, -1, -2, -1, -1, -1, 0, -1, 0, -1, 0, -1, -1, -1, -1, -1, 0, -1, 0, -1, -1, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, -1,-1, 0, -1, -4, -1, 0, -1, 2, -1, 0, 2, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, ...]
如果声音很大:
[-372, -37, -157, -143, 93, -212, 304, -225, 432, -177, 450, -79, 351, 40, 159, 147, -77, 213, -296, 222, -440, 173, -467, 77, -366, -41, -161, -147, 90, -215, 308, -225, 435, -175, 446, -77, 351, 42, 167, 147, -70, 210, -296, -166, 456, -76, 374, 34, ...]
我的python脚本:
def plot_data(data):
x = [i for i in range(0, 4000)]
plt.plot(x,data.data)
plt.show()
def listener():
rospy.init_node('listener', anonymous=True)
rospy.Subscriber('/miro/rob01/platform/mics', platform_mics, show_data)
rospy.spin()
if __name__ == '__main__':
listener()
我想绘制数据并在每次获得新的数据对象时重新绘制或更新。需要不断更新图表。
您知道这样做的好方法吗?
答案 0 :(得分:0)
可能有用的一件事是matplotlib提供的animation功能。它们有多个examples。我认为this example似乎是一个简单的起点。从本质上讲,您无需更新每次,而是更新Line2D对象的数据。不过,我尚未尝试使用ROS回调进行此操作,因此无法说出它在您的用例中的效果如何。
如果您已经在使用ROS,我真的建议您使用rqt_plot。它专为您想要的内容而设计,可以实时绘制主题中的数据,您可以将matplotlib用作绘制后端(尽管我认为默认情况下它们使用pyqtgraph具有一定的速度优势)。甚至不必为编写代码而已,它只是一个命令行调用
rqt_plot
,将弹出一个GUI,可让您指定要显示的主题。
作为最后的建议,如果您要绘制多个主题,我发现Plot Juggler是更好的选择,它还有一个优点是可以在ROS之外使用它并可视化从文件静态加载数据。