2016-05-12 9 views
0

Ich habe das folgende Beispiel für Echtzeit-Streaming in Bokeh 0.10.0 von reddit Thread.Migrations-Code von Bokeh 0.10.0 zu 0.11.0

import time 
from random import shuffle 
from bokeh.plotting import figure, output_server, cursession, show 

# prepare output to server 
output_server("animated_line") 

p = figure(plot_width=400, plot_height=400) 
p.line([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], name='ex_line') 
show(p) 

# create some simple animation.. 
# first get our figure example data source 
renderer = p.select(dict(name="ex_line")) 
ds = renderer[0].data_source 

while True: 
    # Update y data of the source object 
    shuffle(ds.data["y"]) 

    # store the updated source on the server 
    cursession().store_objects(ds) 
    time.sleep(0.5) 

Ich weiß, dass es keine Verwerfung von 0.11.0 Version gibt. Wie wäre der Code in Bokeh 0.11.0? Hier ist mein Versuch es. Fehle ich etwas? Grundsätzlich möchte ich, dass der unten stehende Code eine App ausführt, sodass ich, wenn ich Live-Streaming-Daten zur Verfügung stelle, die Quelle aktualisieren und sie in Echtzeit grafisch darstellen kann.

from bokeh.models import ColumnDataSource, HoverTool, HBox, VBoxForm 
from bokeh.plotting import Figure, output_file, save 
from bokeh.embed import file_html 
from bokeh.models import DatetimeTickFormatter, HoverTool, PreText 
from bokeh.io import curdoc 
from bokeh.palettes import OrRd9, Greens9 

plot = Figure(logo=None, plot_height=400, plot_width=700, title="", 
     tools=["resize,crosshair"]) 

source = ColumnDataSource(data=dict(x=[], y=[])) 
plot.line([1,2,3], [10,20,30], source=source, legend='Price', line_width=1, line_color=OrRd9[0]) 

curdoc().add_root(HBox(plot, width=1100)) 

Antwort

1

Sie wollen wahrscheinlich einen periodischen Rückruf schreiben, etwas:

def update(): 
    ds.data["y"] = shuffle(y) 

curdoc().add_periodic_callback(update, 500) 

Aber auch Sie müssen die Daten tatsächlich in die Spalte Datenquelle setzen, und sagen line die Spalten Sie wollen Verwenden Sie anstelle von Listenliteralen figure:

source = ColumnDataSource(data=dict(x=[1,2,3], y=[10,20,30])) 
plot.line('x', 'y', source=source, legend='Price', 
      line_width=1, line_color=OrRd9[0]) 
+0

Ich versuche, den Parameter "Schritt" zu verstehen. Enthält es den Wert '500', den wir in' add_periodic_callback' übergeben? Wenn ich diese Variable 'step' nirgendwo in meiner Update-Funktion verwende, gibt es den folgenden Fehler 'ERROR: bokeh.util.tornado: Fehler beim periodischen Callback: TypeError ('update() benötigt genau 1 Argument (0 gegeben) ',) ' – Veenit

+0

Entschuldigung, das war ein Copy-Paste-Fehler. Es gibt einige Dekoratoren, die den Callbacks bei jedem Aufruf automatisch Werte vom Typ "count" zur Verfügung stellen können, aber für die grundlegende Verwendung nehmen die Callbacks keine Parameter an. Ich habe die Antwort entsprechend aktualisiert. – bigreddot