我收到了来自麦克风的大量实时数据。
数据集的长度为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()


我想绘制数据并在每次获得新的数据对象时重新绘制或更新。需要不断更新图表。

该图应如下所示:
python - 有没有方便的方法可以重绘实时数据的绘图图(matlibplot,python 2.7)?-LMLPHP

您知道这样做的好方法吗?

最佳答案

可能起作用的一件事是matplotlib提供的animation功能。它们具有多个examples。我认为this example似乎是一个简单的起点。从本质上讲,您不必更新每次,而是更新Line2D对象的数据。不过,我还没有使用ROS回调进行尝试,因此无法说出它在您的用例中的运行情况。

如果您已经在使用ROS,我真的建议您使用rqt_plot。它专为您想要的内容而设计,可以实时绘制主题中的数据,您可以将matplotlib用作绘制后端(尽管我认为默认情况下它们使用pyqtgraph具有一定的速度优势)。甚至不必为编写代码而已,它只是一个命令行调用

rqt_plot


随即会弹出一个GUI,可让您指定要显示的主题。

作为最后的建议,如果您要绘制多个主题,我发现Plot Juggler是更好的选择,它还具有其他优点,即可以在ROS之外使用它,还可以可视化从文件静态加载的数据。

关于python - 有没有方便的方法可以重绘实时数据的绘图图(matlibplot,python 2.7)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54555503/

10-13 08:47
查看更多