Если вы хотите что-то сделать в соответствии с интерфейсом пользовательского интерфейса, как здесь: Bokeh: использование виджета Checkbox для скрытия и отображения графиков, в которых я могу выборочно отображать/скрывать всю фигуру в столбце цифр. Было бы предпочтительным выпадающее меню (OptionMenu с несколькими вариантами выбора), где я мог бы выбрать, какие графики появились (если бы я мог назвать цифры).
Я не знаком с JS, никаких указаний? (Заранее спасибо)
Я надеюсь, что изображение больше не будет видно, и следующая фигура подпрыгнет так:
например:
У меня есть несколько цифр в столбце, сгенерированном как:
from bokeh.io import output_file, show
from bokeh.layouts import column
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(plot_width=250, plot_height=250, title=None)
s1.circle(x, y0, size=10, color="navy", alpha=0.5)
# create another one
s2 = figure(plot_width=250, plot_height=250, title=None)
s2.triangle(x, y1, size=10, color="firebrick", alpha=0.5)
# create and another
s3 = figure(plot_width=250, plot_height=250, title=None)
s3.square(x, y2, size=10, color="olive", alpha=0.5)
# put the results in a column and show
show(column(s1, s2, s3))
Графики не имеют visible
переключателя, по крайней мере, начиная с версии 0.13. Таким образом, вы должны сбросить children
значение виджета макета. Я не совсем уверен, какое взаимодействие вы намереваетесь с выпадающим списком. Вот полный пример с флажком:
from bokeh.io import output_file, show
from bokeh.layouts import column, row
from bokeh.plotting import figure
from bokeh.models import CheckboxGroup, CustomJS
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]
s1 = figure(plot_width=250, plot_height=250, title=None)
s1.circle(x, y0, size=10, color="navy", alpha=0.5)
s2 = figure(plot_width=250, plot_height=250, title=None)
s2.triangle(x, y1, size=10, color="firebrick", alpha=0.5)
s3 = figure(plot_width=250, plot_height=250, title=None)
s3.square(x, y2, size=10, color="olive", alpha=0.5)
col = column(s1, s2, s3)
checkbox = CheckboxGroup(labels=["Plot 1", "Plot 2", "Plot 3"],
active=[0, 1, 2], width=100)
callback = CustomJS(args=dict(plots=[s1,s2, s3], col=col, checkbox=checkbox), code="""
const children = []
for (const i of checkbox.active) {
children.push(plots[i])
}
col.children = children
""")
checkbox.js_on_change('active', callback)
show(row(checkbox, col))
Вы можете сделать что-то подобное с MultiSelect
:
select = MultiSelect(options=[("0", "Plot 1"), ("1", "Plot 2"), ("2", "Plot 3")],
value=["0", "1", "2"], width=100)
callback = CustomJS(args=dict(plots=[s1,s2, s3], col=col, select=select), code="""
const children = []
for (const i of select.value) {
children.push(plots[i])
}
col.children = children
""")
select.js_on_change('value', callback)
Небольшой FYI, что этот код немного неряшлив - он полагается на JS, неявно бросая строки типа "0" на числа.
MultiSelect