2016-11-03 3 views
1

Ich versuche eine reaktive Reihe in Bokeh 0.12.3 zu erstellen, die eine Figur und eine Widgetbox enthält, wobei die Widgetbox eine viel kleinere Breite als die Figur hat.Bokeh reagierende Reihe mit ungleicher Breite

Ich bin in der Lage nur die erstere mit dem folgendes zu erreichen:

from bokeh.io import output_file, show 
from bokeh.layouts import row, widgetbox 
from bokeh.models.widgets import RadioButtonGroup, TextInput 
from bokeh.plotting import figure 

output_file("layout.html") 

x = list(range(11)) 
y0 = x 
y1 = [10 - i for i in x] 
y2 = [abs(i - 5) for i in x] 

# create a new plot 
s1 = figure(width=600, plot_height=600, title=None) 
s1.circle(x, y0, size=10, color="navy", alpha=0.5) 

widgets = widgetbox([RadioButtonGroup(labels=["a", "b"]), TextInput(title="Input:", width=150)], width=150) 

# put the results in a row 
show(row([s1, widgets], responsive=True)) 

Aber dies erzeugt eine ansprechende Reihe, wobei die Breite der Figur und widgetbox gleich ist. Auf Tablets und mobilen Geräten kann dies eine Menge wertvoller Bildschirmflächen beanspruchen.

Die Dokumente auf Layouts http://bokeh.pydata.org/en/latest/docs/user_guide/layout.html geben an, dass jedes Element den gleichen Größenmodus haben muss, aber nicht, dass jedes Element die gleiche Größe haben muss. Ich kann keinen Hinweis finden, wie man die relativen Größen jedes Artikels einstellt.

Ich habe mit verschiedenen Optionen wie sizing_mode herum gespielt und Breiten auf verschiedenen Ebenen eingestellt, aber ich kann das gewünschte Verhalten nicht erzeugen.

Antwort

1

Ab Bokeh 0.12.3 gleich-Größen für Kinder ist die einzige verfügbare Option für die eingebauten in Bokeh Layouts wie row usw. Allerdings konnte man einbetten möglicherweise die verschiedene Kinder in Ihre eigene HTML-Vorlage, die bokeh.embed Funktionen , die dir die Kontrolle über die Dinge geben würde.

Zum Beispiel, wenn Sie anrufen:

components((s1, widgetbox)) 

Dann werden Sie ein Tupel zurück:

(script, (s1_div, widgetbox_div)) 

Sie die <script> Vorlage kann und die beiden <div> s in eine HTML-Vorlage. Die Komponenten werden überall dort angezeigt, wo Sie die <div> s einfügen.

+0

Wie kann ich diese Methode mit einem Bokeh-Server verwenden, um dynamische Daten zu haben? (zum Beispiel Downsampling). Ich finde keine Möglichkeit, mehrere Komponenten mit einer Bokeh-Server-Lösung zu haben ... – Louc

+0

Das ist immer noch ein offenes Problem, an dem aber gerade gearbeitet wird: https://github.com/bokeh/bokeh/issues/4986 – bigreddot