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?
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