2

我正在使用运行 Python 3 的 Raspberry Pi 记录来自 5 个温度传感器的数据。

一切运行良好,我现在想在一张图上显示 5 个温度的图,每 10 分钟左右更新一次。我想使用 Plotly。

我编写了以下代码来测试这个想法。

#many_lines2

    # tryimg to sort out why x is sent more than once when using extend

    import time

    import plotly.plotly as py
    from plotly.graph_objs import *
    import plotly.tools as tls
    #tls.set_credentials_file(username=, api_key)
    from datetime import datetime


    for count in range  (1,5):

        x1 = count
        y1 = count * 2
        y2 = count * 3
        y3 = count * 4



        trace1 = Scatter(x=x1,y = y1,mode = "lines")
        trace2 = Scatter(x=x1,y = y2,mode = "lines")
        trace3 = Scatter(x=x1,y = y3,mode = "lines")

        data = [trace1,trace2,trace3]

        py.plot (data,filename="3lines6", fileopt = "extend")

        time.sleep(60)

在此处查看 plotly 接收的绘图和数据https://plot.ly/~steverat/334/trace0-trace1-trace2/ 查看 plotly 接收的数据的数据选项卡。

在我看来,好像数据表中的 x 值在发送第一个值后被添加了三次。

我通过在 python 中使用 .append 创建值列表来获得正确的结果。这会导致列表很长,更多数据要发送到 plotly 并且似乎是错误的。

执行此操作的代码如下,可以在此处找到有关 plotly 服务的数据。https://plot.ly/~steverat/270

# using lists and append to send data to plotly

import time

import plotly.plotly as py
from plotly.graph_objs import *
import plotly.tools as tls
#tls.set_credentials_file(username='steverat', api_key='f0qs8y2vj8')
from datetime import datetime

xlist = []
y1list= []
y2list = []
y3list = []

for count in range  (1,5):
    xlist.append (count)
    y1list.append (count * 2)
    y2list.append (count * 3)
    y3list.append (count * 4)

    print "xlist = ", xlist
    print "y1list = ", y1list
    print "y2list = ", y2list



    trace1 = Scatter(x=xlist,y = y1list,mode = "lines")
    trace2 = Scatter(x=xlist,y = y2list,mode = "lines")
    trace3 = Scatter(x=xlist,y = y3list,mode = "lines")

    data = [trace1,trace2,trace3]

    py.plot (data,filename="3lines2")

    time.sleep(60)

我在网上搜索过,可以找到流式传输数据的示例,但我只想每 10 次更新一次图表。

我错过了什么明显的东西吗???

干杯

史蒂夫

4

1 回答 1

0

来自 Plotly 的 Andrew。非常感谢你把这个记录得这么好!

编辑

现在应该修复此问题,这会使以下解决方法过时/不正确。请不要再使用以下解决方法!(虽然保留在这里作为文档)

TL;DR(让它工作)

试试这个代码:

import time
import plotly.plotly as py
from plotly.graph_objs import Figure, Scatter
filename = 'Stack Overflow 31436471'

# setup original figure (behind the scenes, Plotly assumes you're sharing that x source)
# note that the x arrays are all the same and the y arrays are all *different*
fig = Figure()
fig['data'].append(Scatter(x=[0], y=[1], mode='lines'))
fig['data'].append(Scatter(x=[0], y=[2], mode='lines'))
fig['data'].append(Scatter(x=[0], y=[3], mode='lines'))

print py.plot(fig, filename=filename, auto_open=False)
# --> https://plot.ly/~theengineear/4949

# start extending the plots
for i in xrange(1, 3):
    x1 = i
    y1 = i * 2
    y2 = i * 3
    y3 = i * 4

    fig = Figure()
    # note that since the x arrays are shared, you only need to extend one of them
    fig['data'].append(Scatter(x=x1, y=y1))
    fig['data'].append(Scatter(y=y2))
    fig['data'].append(Scatter(y=y3))

    py.plot(fig, filename=filename, fileopt='extend', auto_open=False)

    time.sleep(2)

更多信息

这似乎是我们后端代码中的一个错误。问题是我们重用了散列到相同值的数据数组。在这种情况下,您的x值将散列到相同的值,当您扩展跟踪时,您实际上将相同 x的数组扩展了 3 次。

上面提出的修复只扩展了 x 数组中的一个,无论如何,它与其他跟踪使用的数组相同

请注意,要使其正常工作,您必须在初始设置中提供一个非零长度数组。这是因为如果没有任何数据开始,Plotly 将不会保存数组。

要点是,只要您初始化相同x的数组并确保在初始化时您的y数组与任何数组都不相同,您就可以了x

对不便的解决方法表示歉意。当我们最终提交修复时,我将编辑此回复。

于 2015-07-20T18:21:24.783 回答