【问题标题】:Plotting data from generator in Python在 Python 中从生成器绘制数据
【发布时间】:2015-09-24 18:24:30
【问题描述】:

Python(IPython-Jupyter notebook)中是否有任何接受生成器的绘图选项?

AFAIK matplotlib 不支持。我发现的唯一选择是 plot.ly 和他们的 Streaming API,但由于需要实时绘制大量数据,我不想使用在线解决方案。

【问题讨论】:

    标签: python ipython jupyter


    【解决方案1】:

    固定长度的生成器始终可以转换为列表。

    vals_list = list(vals_generator)
    

    这应该是matplotlib 的适当输入。


    根据您更新的信息猜测,可能是这样的:

    from collections import deque
    from matplotlib import pyplot
    
    data_buffer = deque(maxlen=100)
    for raw_data in data_stream:
      data_buffer.append(arbitrary_convert_func(raw_data))
      pyplot.plot(data_buffer)
    

    基本上使用双端队列来拥有固定大小的数据点缓冲区。

    【讨论】:

    • 谢谢,我知道如何从生成器创建列表。但我面临实时获取数据的问题。
    • 在这种情况下,您需要更具体地说明您的问题是什么。生成器是否已经随时为您提供完整数据,并且您想在新数据到达时更新绘图?生成器是否只产生 new 数据点,您需要将它们添加到以前的数据中吗?在这两种情况下,是什么阻止您循环生成器并手动附加/更新数据?您实际上是否必须首先获取数据,在这种情况下,您要获取哪些数据以及从哪里获取?
    • 发生器产生从连接到某些硬件测量加速度的串行线路接收的数据。我必须对该数据(在每个样本上)进行一些实时处理,然后绘制结果(并保持绘图更新)。
    • 听起来你应该有一个for new_data in generator,处理new_data(可能将它与预先存在的数据合并),然后以通常的方式绘制这个处理过的数据。您应该为您的问题添加一个最小工作示例和数据流的具体描述,以获得有用的答案。
    • 好的,我希望它可能是处理新数据的更方便的方法,而不是“与预先存在的数据合并”并再次绘制图表。
    猜你喜欢
    • 2019-02-10
    • 2021-01-07
    • 2023-03-29
    • 2023-02-09
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    相关资源
    最近更新 更多