Bokeh: выберите строку ColumnDataSource с помощью виджета TextInput - PullRequest
0 голосов
/ 22 мая 2018

Я представляю, что это довольно простая вещь, но я не уверен, как это сделать.У меня есть таблица данных с тремя столбцами.Два представляют собой числовые значения, которые отображаются на графике, а одно - строки.Я хочу, чтобы пользователь мог вводить данные в поле, а соответствующая строка в DataTable и точка на графике должны быть выделены / выделены.

Я думаю, что мне нужно использовать source.selected.indices или, возможно,CustomJS обратный вызов.

Кто-нибудь может помочь?

from random import randint
from bokeh.io import output_file, show
from bokeh.layouts import gridplot, row
from bokeh.models import ColumnDataSource
from bokeh.models.widgets import DataTable, TableColumn, TextInput

search_words = TextInput(title="Search for country")

data = dict(
    x=[randint(0, 100) for i in range(10)],
    y=[randint(0, 100) for i in range(10)],
    countries = ["France","Spain","Germany","Italy","Portugal","Poland","Russia","Bulgaria","Sweden","Belgium"]
)
source = ColumnDataSource(data)

columns = [
    TableColumn(field="x", title="x"),
    TableColumn(field="y", title="y"),
    TableColumn(field="countries", title="Countries"),
]

TOOLS = "pan,wheel_zoom,box_select,reset"
fig = figure(plot_width=400, plot_height=400, tools=TOOLS)
fig.circle('x', 'y', source=source,size=10,selection_color="red", hover_color="green")


data_table = DataTable(source=source, columns=columns, width=400, height=280)

p = gridplot([fig],[data_table],
                    toolbar_location = "above")

show(row(p, search_words))

plot

1 Ответ

0 голосов
/ 22 мая 2018

Вы правы, что при использовании метода show для отображения ваших диаграмм вам потребуется использовать пользовательский JavaScript, чтобы виджет на диаграмме обновлял источники данных.Метод show визуализирует все, что было запрограммировано в Python, как документ HTML, но после визуализации документ HTML не имеет возможности для дальнейшего взаимодействия с кодом Python.

Альтернативой является использование сервера Bokeh,как задокументировано здесь.По сути, вы можете поместить весь свой код в файл main.py, поместить этот файл в папку с именем вашего проекта, а затем в терминал родительского каталога этой папки проекта запустить:

bokeh serve --show project_folder_name

Вам также необходимо написать метод on_change для ввода текста, как описано здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...