Eine nette Sache über Bokeh ist, dass Callbacks von der Python-Ebene, die Aktionen auf der Javascript-Ebene ohne die Notwendigkeit von Bokeh-Server führen, angegeben werden können. So kann man interaktive Widgets erstellen, die in einem Browser laufen, ohne dass ein Ipython- oder Bokeh-Server läuft.Bokeh: Pass Vars zu CustomJS für Widgets
Die 0.9.3. Dokumentation gibt ein Beispiel, das ich in einem ipython Notebook wiedergeben kann: 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)
ich Code wie folgt anpassen wollen einige einfache Online-Zuordnungen zu erstellen. Meine Frage ist, wie kann ich andere Variablen von Python direkt an Javascript weitergeben, ohne einen Slider aufzurufen. Zum Beispiel nehme ich will das Javascript werden:
y[i] = Math.pow(x[i], A*f)
wo die A wurde in einer ipython Code Zelle oben definiert (zum Beispiel A = 10). Es ist einfach genug, 'var A = 10' im Javascript zu definieren, aber ich möchte den Wert von A und anderen Variablen in Python setzen und sie dann in dieses Javascript übergeben. Gibt es einen Weg?
Danke, das wäre toll. Ich habe ein paar grundlegende interaktive Visualisierungen mit Bokeh-Server erstellt und interagiere von der ipywidgets-Bibliothek in Ipython (siehe [Bokeh-Dokumentation] (http://bokeh.pydata.org/en/latest/docs/user_guide/notebook.html#id5)) bezieht sich auf die jetzt veraltete Bibliothek Ipython.html.widgets, sollte also in ipywidgets geändert werden). Aber wenn man das obige Problem lösen könnte, wäre es einfach, interaktive Inhalte für Leute ohne Python/Bokeh zu erzeugen und zu modifizieren. Das könnte den Unterricht in vielen Disziplinen revolutionieren. – JHuw