2013-04-23 185 views
2

我试图开发一个遥测系统,该系统从Arduino发送传感器数据,并实时绘制出来。为此,我使用Python和matplotlib库。 我的问题是,每当新的数据点到达时,我想通过将其绘制到与其他数据点相同的图中来添加该数据点。到目前为止,我找不到解决方案。matplotlib,在图中绘制多个图/点

+2

使用'set_data'。参见例子[this mpl example](http://matplotlib.org/dev/examples/animation/bayes_update.html);它使用动画,但是数据是来自动画还是传感器在这种情况下无关紧要。 – Evert 2013-04-23 13:05:18

+0

不幸的是,Matlab没有与Mathematica中的动态函数等效。 – 2013-04-25 21:38:02

+0

所以,我已经尝试了Evert发送给我的set_data函数。这很有用,但是它仍然有点慢,为自己绘制每个新的数据点。我接收约5-10赫兹的新数据点,所以调用draw()会产生瓶颈。我现在的解决方案是始终收集10个数据点并将它们组合在一起。 – user2251084 2013-05-02 09:07:43

回答

-1

据我所看到的,你有这样做的几种不同的方式(我会在这个我认为越来越多的困难

  1. 制作的位图文件,如巴纽,其中有列出它们每次新数据点到达时都要重新生成,要做到这一点,你需要将旧数据存储在文件或数据库中的某个地方。
  2. 在浏览器中使用svg,然后使用javascript添加点或线。 http://sickel.net/blogg/?p=1506
  3. 制作位图,存储并编辑它以添加新的点 - 如果您要“将旧点关闭“,或者在更多数据到达时重新缩放图像。
  4. 制作一系列位图,并将总图作为很多切片的组合。 - 在这里,您可以轻松“滚出”旧点,但如果您想重新调整,则运气不佳。
+0

3.和4.似乎更多的是实验... – 2013-04-23 12:47:49

+1

这是非常复杂的。您可以简单地重叠绘制当前坐标轴,或使用'set_data'更新数据。 svg/javascript不在任何地方,它是matplotlib。位图可能也不适用:它听起来像生成(矢量)图,而不是位图。 – Evert 2013-04-23 13:07:09

1

您可以用Arduino API在Plotly中将数据从Arduino流式传输到Plotly图形中。你有两种选择:不断传输数据(这听起来像你想要做的),或传输一个块。

如果刷新页面,它会每隔几秒更新一次图表。

Arduino API可用here。而且,如果您已经在使用Python,则可以使用extend选项将数据更新到另一个图中。 Python API是here

下面是它看起来如何从一个Arduino发送一个例子,你可以看到交互式版本here

enter image description here

全面披露:我在Plotly工作。