【问题标题】:Is there a convenient way of redraw a plotted graph of live data (matlibplot, python2.7)?有没有一种方便的方法来重绘实时数据的绘图图(matlibplot,python2.7)?
【发布时间】:2019-02-06 14:05:52
【问题描述】:

我从麦克风收到一堆实时数据。 一个数据集的长度是 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 2.7 中,您应该使用 xrange 而不是 range 进行 for 循环。在这种情况下,您也应该能够只写x=range(4000)
  • 乍一看,这听起来像是你会使用 Bokeh 或 Plotly 的东西。 matplotlib 相当有限。
  • 我强烈反对@MatthewArthur 的评论。 Matplotlib 在某些方面有局限性,主要是 3D 绘图和 Web 集成,但这里都不需要。关于这个问题,show_dataplot_data 是否意味着相同?您是否看过有关使用 matplotlib 进行实时绘图的类似问题?他们在多大程度上没有帮助?

标签: python matplotlib data-science ros


【解决方案1】:

可能有用的是 matplotlib 提供的animation 功能。他们有很多examples。我认为this example 看起来是一个简单的起点。本质上不是每次都重新绘制,而是更新Line2D 对象的数据。不过,我还没有尝试过使用 ROS 回调,所以我无法说明它在您的用例中的效果如何。

如果您已经在使用 ROS,我真的建议您使用 rqt_plot。它专为您想要的,实时绘制来自主题的数据而设计,您可以使用 matplotlib 作为绘图后端(尽管我认为他们默认使用 pyqtgraph,这具有一些速度优势)。它甚至不是你必须为其编写代码的东西,它只是一个命令行调用

rqt_plot

然后会弹出一个 GUI,让您指定要可视化的主题。

最后的建议是,如果您有多个要绘制的主题,我发现Plot Juggler 是一个更好的选择,它还有一个额外的优势,即您可以在 ROS 之外使用它并可视化加载的数据静态地从文件中获取。

【讨论】:

  • 我会尽快去看看。不幸的是,接下来的几周我非常忙碌。感谢您到目前为止的回答。
猜你喜欢
  • 2015-06-24
  • 1970-01-01
  • 2013-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-17
  • 1970-01-01
相关资源
最近更新 更多