Ich möchte in der Lage sein, durch viele Diagramme, die das Ergebnis von Simulationen über 3+ Dimensionen sind, zu gleiten. Ich benutze das Bokeh-Paket über Python.Abhängige Schieberegler mit Bokeh, wie schreibe ich die Rückrufe
Der Einfachheit halber nehmen wir an, ich habe zwei Dimensionen: d und nc. Aber nc hängt von d in der folgenden Art und Weise:
if d=100, nc=56,57
if d=20, nc=5,6
Und ich habe 4 Bilder:
d_100_nc_56.png,
d_100_nc_57.png,
d_20_nc_5.png,
d_20_nc_6.png
Deshalb möchte ich zwei Schieber, eine für d und eine für nc, zu Durchlaufen Sie die .png Bilder durch die image_url Funktion von Bokeh.plotting.Figure. Jedoch sollte der Wert der nc Schieber selbst aktualisieren, wie ich den Schieber in d
from bokeh.io import vform
from bokeh.models import CustomJS, ColumnDataSource, Slider
from bokeh.plotting import Figure, output_file, show
output_file('image.html')
source = ColumnDataSource(data=dict(url=['d_100_nc_55.png']))
p = Figure(x_range=(0,1), y_range=(0,1))
callback_nc = CustomJS(args=dict(source=source), code="""
var data = source.get('data');
var f = cb_obj.get('value')
old = data['url'][0]
to_replace=old.substring(old.lastIndexOf("nc_")+3,old.lastIndexOf(".png"))
data['url'][0] = old.replace(to_replace,f.toString(10))
source.trigger('change');
""")
callback_d = CustomJS(args=dict(source=source), code="""
var data = source.get('data');
var f = cb_obj.get('value')
old = data['url'][0]
to_replace=old.substring(old.lastIndexOf("d_")+2,old.lastIndexOf("_nc_"))
data['url'][0] = old.replace(to_replace,f.toString(10))
source.trigger('change');
""")
p.image_url('url',source=source, x=0, y=1,w=1,h=1)
p.text(x=0,y=0,text=source.data['url'])
slider_nc = Slider(start=55, end=65, value=1, step=1, title="nc", callback=callback_nc)
slider_d = Slider(start=20, end=100, value=100, step=80, title="density", callback=callback_d)
layout = vform(slider_nc,slider_d, p)
show(layout)
jedoch ändern, ich weiß nicht, wie die d Schieber als Argument übergibt an die nc Slider, um seine Eigenschaften zu holen und sie im laufenden Betrieb zu aktualisieren. Ist das möglich ? Ansonsten wird die Verwendung mehrerer Schieberegler durch Bokeh ziemlich stark eingeschränkt.
Danke. Das ist großartig ! – Mathusalem
Was wäre das Äquivalent für die Python-Funktion wie in 'CustomJS.from_py_func (callback)'? – Matt
In diesem Fall identisch mit dem aktualisierten (einfacheren) JS-Code. Persönlich mag ich 'from_py_func' nicht – bigreddot