обратный вызов через taptool представляет данные - PullRequest
0 голосов
/ 15 марта 2019

Из того, что я могу сказать в своем ограниченном обзоре документации по боке, возможность щелкнуть по глифу на графике, а затем представить диалоговое окно или набор данных, пока недоступна. Я не хочу, чтобы Datatable был представлен до тех пор, пока не будет выбран глиф. В идеале хотелось бы, чтобы была возможность скрыть диалог или данные.

Кажется, что bokeh.models.widgets.dialog устарели после 0.10.0. Я мог бы использовать это, но на данный момент его нет в python 3.7. Предложения?

1 Ответ

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

Некоторые функции официально не поддерживаются, но иногда можно найти обходные пути, подобные этой (протестировано на Bokeh v1.0.4):

from bokeh.plotting import figure, show
from bokeh.layouts import column
from bokeh.models import ColumnDataSource, Slider, DataTable, TableColumn, CustomJS

plot = figure(tools = 'tap')
source = ColumnDataSource(dict(x = list(range(6)), y = [x ** 2 for x in range(6)]))
circles = plot.circle('x', 'y', source = source, size = 20)
slider = Slider(start = -1, end = 5, value = 6, step = 1, title = "i", width = 300)
columns = [TableColumn(field = "x", title = "x"), TableColumn(field = "y", title = "x**2")]
table = DataTable(source = source, columns = columns, width = 320)
plot.js_on_event('tap', CustomJS(args = {'table': table, 'source': source, 'slider': slider}, code = '''
        const selected_index = source.selected.indices[0] 
        if (selected_index != null) 
            table.height = 0;
        else
            table.height = slider.value * 25 + 25;'''))
callback_code = """ i = slider.value;
                    new_data = {"x": [0,1,2,3,4,5], "y": [0,1,4,9,16,25]}
                    table.source.data = new_data
                    table.height = i * 25 + 25;  """
callback = CustomJS(args = dict(slider = slider, table = table), code = callback_code)
slider.js_on_change('value', callback)
show(column(slider, plot, table))

Результат: enter image description here

...