2015-08-31 10 views
5

Una cosa carina di Bokeh è che i callback possono essere specificati dal livello Python che genera azioni sul livello javascript senza bisogno di bokeh-server. Quindi è possibile creare widget interattivi che girano in un browser senza un server Ipython o Bokeh in esecuzione.Bokeh: passa le vars a CustomJS per i widget

Il 0.9.3. documentazione fornisce un esempio che posso riprodurre in un notebook ipython: http://bokeh.pydata.org/en/latest/docs/user_guide/interaction.html#cutomjs-for-widgets

from bokeh.io import vform 
from bokeh.models import CustomJS, ColumnDataSource, Slider 
from bokeh.plotting import figure, output_file, show 

output_file("callback.html") 
x = [x*0.005 for x in range(0, 200)] 
y = x 

source = ColumnDataSource(data=dict(x=x, y=y)) 

plot = figure(plot_width=400, plot_height=400) 
plot.line('x', 'y', source=source, line_width=3, line_alpha=0.6) 

callback = CustomJS(args=dict(source=source), code=""" 
     var data = source.get('data'); 
     var f = cb_obj.get('value') 
     x = data['x'] 
     y = data['y'] 
     for (i = 0; i < x.length; i++) { 
      y[i] = Math.pow(x[i], f) 
     } 
     source.trigger('change'); 
    """) 

slider = Slider(start=0.1, end=4, value=1, step=.1, title="power", callback=callback) 

layout = vform(slider, plot) 
show(layout) 

voglio adattare il codice come questo per creare alcune semplici assegnazioni on-line. La mia domanda è come posso passare altre variabili da python a javascript direttamente senza invocare un dispositivo di scorrimento. Per esempio supponiamo che io voglio il Javascript per diventare:

y[i] = Math.pow(x[i], A*f) 

in cui la A è stato definito in una cella di codice ipython sopra (ad esempio A = 10). È abbastanza facile definire 'var A = 10' in javascript, ma mi piacerebbe impostare il valore di A e altre variabili in python e poi passarle in questo javascript. C'è un modo?

risposta

5

A partire da Bokeh 0.9.3 è possibile passare solo "Modelli Bokeh" (ad esempio cose come sorgenti dati e renderer), non oggetti Python arbitrari. Ma stiamo lavorando per estendere i documenti bokeh con un semplice concetto di spazio dei nomi che può essere facilmente replicato.

+0

Grazie, sarebbe fantastico. Ho creato alcune visualizzazioni interattive di base con il server Bokeh e interagisco dalla libreria ipywidgets in Ipython (nota la documentazione di Bokeh) (http://bokeh.pydata.org/en/latest/docs/user_guide/notebook.html#id5) si riferisce alla libreria Ipython.html.widgets ora deprecata, quindi dovrebbe essere modificata in ipywidgets). Ma se uno potesse risolvere il problema precedente, sarebbe facile generare e modificare il contenuto interattivo per le persone senza Python/Bokeh installato. Ciò potrebbe * rivoluzionare * l'insegnamento in molte discipline. – JHuw