2017-12-03 52 views
1

私のBokehストリーミングプロットは空白の矩形です。リアルタイムで更新されない単純なラインプロットを作成することができます。 私はBokehのバージョンのBokehドキュメントを読んでいます。私は0.12.10とPython3.5.3を使用しています。私は、エラーメッセージの解決策をオンラインで広範に調査しました。Bokehストリーミングプロットが空白

私はエラー私は、センサからのデータを取得するためにpyserialを使用しています

Error thrown from periodic callback: ValueError('All streaming column updates must be the same length') 

を取得しています。値の例は、温度が73.40、時間が12:30:42です。このデータをリアルタイムでプロットしたいと思います。

import serial 
from bokeh.io import curdoc 
from bokeh.models import ColumnDataSource 
from bokeh.plotting import figure, output_file, show 

ser = serial.Serial('/dev/ttyACM0', 9600) 

source = ColumnDataSource(dict(time=[], sensor=[])) 

p = figure(plot_height=400, plot_width=1200, title="Fahrenheit Plotting") 

p.title.text = "Fahrenheit Plotter" 
p.title.text_color = "blue" 
p.title.text_font = "arial" 
p.title.text_font_style = "bold" 
p.yaxis.minor_tick_line_color = "yellow" 
p.xaxis.axis_label = "Time" 
p.yaxis.axis_label = "Fahrenheit" 



p.line(x='time', y='sensor',line_width=3,color="blue",alpha=0.8,source=source) 


def update(): 
    while True: 
     arduinoString = ser.readline() 
     data_array = str(arduinoString).split(',') 
     time = data_array[1] 
     sensor1 = data_array[2] 
     print(sensor) 
     print(time) 
     new_data = dict(time=[], sensor1=[]) 
     new_data['time'] = data_array[1] 
     new_data['sensor'] = data_array[2] 
     source.stream(new_data, 20) 

curdoc().add_root(p) 
curdoc().add_periodic_callback(update, 100) 
curdoc().title = "Device Temperatures" 

答えて

1

のコード例は、自己完結型ではありませんので、私は修正するためにそれを実行し、更新されたバージョンを使用して返信することはできません。ここで

コードがあります。しかし、エラーメッセージはあなたに何が間違っているかを伝えています。 ColumnDataSourceデータ辞書のすべての列は、常に同じ長さでなければなりません。 (ここにリストが起こるが、配列することができ、など)timesensorの列が同じ長さを持っていない

new_data = { 
    'time' : [1,2,3,4], 
    'sensor : [100, 200] 
} 

:あなたはnew_dataはこれに類似した何かを見なければなりません。それが問題だ。 CDSのすべての列は常に同じ長さでなければなりません。

+0

ありがとうございます。私は、温度ストリングとセンサーストリングを同じように「00072:94」「12:55:33」のように作成しました。私はもうエラーメッセージが表示されません。 – tluafed