2017-02-13 40 views
0

私は、読んでいるファイルに新しいデータを表示するために定期的に更新するbokehプロット用のテンプレートを設計しています。Bokehにプロットが表示されない

現時点では、単純なジェネレータを使用しているだけで、アプリをテストするだけの簡単な配列になります。

ただし、bokeh serve --show test.pyを実行するとブラウザに何も表示されません。私はエラーがないので、どのように進めるか分からない。 printステートメントでデバッグしようとすると、コールバックが機能していないことがわかります。

この特定のテストでは、各更新時に同じ図に複数のヒストグラムを作成する必要があります。

import numpy as np 
from bokeh.io import curdoc 
from bokeh.models import ColumnDataSource 
from bokeh.plotting import figure 

def histplot_updater(sources, data_stream): 
    def updater(): 
     data = data_stream.next() 
     print 'got data' 
     for i in range(data.shape[1]): 
      d = data[:, i] 
      mind = np.min(d) 
      maxd = np.max(d) 
      step = max((maxd - mind) // 100, 1) 
      hist, edges = np.histogram(d, density=True, bins=range(mind, maxd + 2, step)) 
      new_data = {'top': hist, 'left': edges[:-1], 'right': edges[1:]} 
      sources[i].data = new_data 
    return updater 

def init_histplot(f, data, **kwargs): 
    hs = [] 
    ss = [] 
    for i in range(data.shape[1]): 
     source = ColumnDataSource(dict(top=[], left=[], right=[])) 
     kwgs = {k: v[i] for k,v in kwargs.items()} 
     h = f.quad(top='top', bottom=0, left='left', right='right', source=source, **kwgs) 
     hs.append(h) 
     ss.append(source) 
    return hs, ss 

if __name__ == '__main__': 
    fig = figure() 
    Data = (np.random.normal([0, 1], [1, 2], (1000, 2)) for i in xrange(100)) 

    h_sources = init_histplot(fig, Data)[1] 
    curdoc().add_root(fig) 
    curdoc().add_periodic_callback(histplot_updater(h_sources), 1000) 

答えて

0

私がテストされ、あなたが削除しない限り、あなたのコードのいずれも実行しません:

if __name__ == '__main__': 

私はボケが標準プログラムと同じように実行されないことを推測しています。それを削除すると、エラーが発生します。つまり、

Error running application handler <bokeh.application.handlers.script.ScriptHandler object at 0x7fed2cc1a590>: 'generator' object has no attribute 'shape' 
+0

これで、デバッグを開始できます。なぜそれがそれのように機能するかについての任意のアイデア? – Lucidnonsense

+0

私は確信していませんが、私の最高の推測は、メインはボケの側にあり、それは私たちのコードを呼び出すので、私たちは技術的にメイン – bourneeoo

関連する問題