【问题标题】:matplotlib, draw multiple graphs / points in figurematplotlib,在图中绘制多个图形/点
【发布时间】:2013-11-19 08:59:53
【问题描述】:

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

【问题讨论】:

  • 使用set_data。参见例如this mpl example;它使用动画,但在这种情况下,数据来自动画还是传感器并不重要。
  • 很遗憾,Matlab 没有 Mathematica 中的 Dynamic 函数。
  • 所以,我已经尝试了示例 Evert 发送给我的 set_data 函数。这工作得很好,但是它仍然有点慢,为自己绘制每个新数据点。我正在接收大约 5-10 Hz 的新数据点,因此对 draw() 的调用会产生瓶颈。我现在的解决方案是始终收集 10 个数据点并将它们绘制在一起。

标签: python matplotlib arduino


【解决方案1】:

您可以使用 Plotly 中的 Arduino API 将数据从 Arduino 流式传输到 Plotly 图形中。您有两个选择:连续传输数据(这听起来像是您想要做的),或传输单个数据块。

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

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

这是一个从 Arduino 传输的示例,您可以查看交互式版本here

完全披露:我在 Plotly 工作。

【讨论】:

    【解决方案2】:

    据我所知,您有几种不同的方法(我会按照我认为会增加难度的方式列出它们

    1. 制作位图文件,例如.png,每次新数据点到达时都必须重新生成该文件。为此,您需要将旧数据存储在文件或数据库中的某个位置。
    2. 在浏览器中使用 svg。然后你可以使用javascript添加点或线(例如http://sickel.net/blogg/?p=1506)
    3. 制作位图,存储并编辑它以添加新点 - 如果您想在一端“滚动旧点”,或者在更多数据到达时重新缩放图像,这真的很棘手。
    4. 制作一系列位图,并将总图作为许多切片的组合。 - 在这里您可以轻松“滚出”旧积分,但如果您想重新调整比例,您就很不走运了。

    【讨论】:

    • 这一切都非常复杂。您可以简单地绘制当前坐标轴,或使用set_data 更新数据。 svg/javascript 没有出现在任何地方,它是 matplotlib。位图也可能不适用:听起来像是生成了(矢量图),而不是位图。
    猜你喜欢
    • 2019-04-19
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 2021-04-22
    • 2019-06-24
    • 2015-01-09
    相关资源
    最近更新 更多