2017-02-13 11 views
0

Ich entwerfe eine Vorlage für ein Bokeh Plot, die regelmäßig aktualisiert wird, um die neuen Daten in einer Datei anzuzeigen, die ich lesen würde.Bokeh zeigt keine Plots

Momentan benutze ich nur einen einfachen Generator, der nur numpige Arrays erstellt, um die App zu testen.

Nichts erscheint jedoch im Browser, wenn ich bokeh serve --show test.py ausführen. Ich bin mir nicht sicher, wie es weitergehen soll, da es keine Fehler gibt. Mein Versuch, mit einer print-Anweisung zu debuggen, zeigt, dass der Callback nicht funktioniert.

Dieser spezielle Test sollte bei jeder Aktualisierung mehrere Histogramme auf der gleichen Figur machen.

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) 

Irgendwelche Ideen?

Antwort

0

I getestet und keines Ihres Code ausführt, wenn Sie entfernen:

if __name__ == '__main__': 

Ich vermute, dass Bokeh nicht die gleiche Art und Weise wie ein Standard-Programm. Wenn Sie das entfernen, dann erhalten Sie Fehler, nämlich

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

Großartig, jetzt kann ich mit dem Debuggen beginnen. Irgendwelche Ideen darüber, warum es so funktioniert? – Lucidnonsense

+0

Ich bin mir nicht sicher, meine beste Vermutung ist, dass der Hauptteil auf der Seite von Bokeh ist und dann unseren Code aufruft, also schreiben wir technisch nicht den Hauptteil – bourneeoo

Verwandte Themen