Добавление интерактивной плитки на график Bokeh с использованием CustomJS - PullRequest
0 голосов
/ 01 марта 2019

У меня есть интерактивный график Bokeh, который использует CheckBoxGroup для построения различных комбинаций.Я хотел иметь возможность изменять заголовок каждый раз, когда менял комбинации, вместо того, чтобы выполнять изменение заголовка в коде и генерировать график снова.

Я хорошо знаком с CustomJS, но я пыталсяследующий (... только отрывок заголовка):

p = figure(title = 'Default title that appears',
      toolbar_location = 'right')
.
.
update_title = CustomJS(args =dict(source=source, text = text),
                    code ="""
                const data = source.data;
                var text = text.value;

                text = text.value;

                source.change.emit();
""")
text_group = TextInput(title = 'Title', value = "Default value", callback = update_title)
show(column(p,checkbox_group, text_group))

Результат, который я получаю, показывает поле заголовка, но ничего не происходит, когда я меняю заголовок.

Я по сути хочучтобы сделать это:

Но с CustomJS вместо обратных вызовов Python.

1 Ответ

0 голосов
/ 02 марта 2019

Вам просто нужно передать заголовок обратному вызову.Я обнаружил, что название сюжета - это модель Боке, поэтому применяются все обычные манипуляции.Ваш обратный вызов может выглядеть примерно так:

update_title = CustomJS(args=dict(title=plot.title), code="""
    title.text = cb_obj.value
""")

, а полный пример будет

import numpy as np
from bokeh.layouts import row, column
from bokeh.models import CustomJS, TextInput
from bokeh.plotting import figure, output_file, show, ColumnDataSource
x = np.linspace(0, 10, 500)
y = np.sin(x)
source = ColumnDataSource(data=dict(x=x, y=y))
plot = figure(y_range=(-10, 10), plot_width=400, plot_height=400, title='my sine wave')
plot.line('x', 'y', source=source, line_width=3, line_alpha=0.6)
update_title = CustomJS(args=dict(title=plot.title), code="""
    title.text = cb_obj.value
""")
text = TextInput(title='Enter title', value='my sine wave', callback=update_title)
layout = row(
    plot,
    text
)
output_file('title_change.html', title='change title')
show(layout)
...