Боке: виджет для отображения / скрытия фигур

1

Если вы хотите что-то сделать в соответствии с интерфейсом пользовательского интерфейса, как здесь: Bokeh: использование виджета Checkbox для скрытия и отображения графиков, в которых я могу выборочно отображать/скрывать всю фигуру в столбце цифр. Было бы предпочтительным выпадающее меню (OptionMenu с несколькими вариантами выбора), где я мог бы выбрать, какие графики появились (если бы я мог назвать цифры).

Я не знаком с JS, никаких указаний? (Заранее спасибо)

Я надеюсь, что изображение больше не будет видно, и следующая фигура подпрыгнет так:

например: Изображение 174551

У меня есть несколько цифр в столбце, сгенерированном как:

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))
Теги:
bokeh

1 ответ

2
Лучший ответ

Графики не имеют 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" на числа.

  • 0
    Это прекрасно работает с флажками. Для выпадающего меню я думал как меню параметров, в котором вы выбираете графики в списке, который вы хотите.
  • 1
    Ах, вы могли бы сделать то же самое с MultiSelect
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню