Как заполнить таблицу выбранными значениями точечной диаграммы? - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь создать таблицу из выборки на точечной диаграмме в bokeh в spyder.

Используя ColumnDataSource, я могу чистить ссылки на разных графиках.

Я бы хотел заполнить таблицу выбранными значениями.

Мне удалось получить индексы для одного выбора с помощью обратного вызова.

def callback(attr, old, new):
    patch_name =  source.data[new['1d']['indices'][0]]
    print(patch_name)

Можно ли получить идентификаторы множественных выборов?

1 Ответ

0 голосов
/ 04 июля 2018

Вы можете создать новый ColumnDataSource для построения DataTable и обновлять данные этого набора данных каждый раз, когда делается выбор:

from bokeh.models import ColumnDataSource
from bokeh.plotting import figure
from bokeh.models.widgets.tables import DataTable, TableColumn
from bokeh.layouts import row
from bokeh.io import curdoc

source = ColumnDataSource(dict(
    x=[1, 2, 3, 4, 5, 6],
    y=[1, 2, 3, 4, 5, 6],
))

p = figure(
    plot_height=300,
    tools='lasso_select'
)

rc = p.scatter(
    x='x',
    y='y',
    size=20,
    color='red',
    source=source,
    fill_alpha=1.0,
    line_alpha=1.0,
)

columns = [
    TableColumn(field="value", title="Value"),
]
init_cds = ColumnDataSource(data=dict(value=['']))
table = DataTable(
    source=init_cds,
    columns=columns,
    reorderable=False,
)

def update_table(attr, old, new):
    print(new.indices)
    if new.indices != []:
        new_vals_dict = {'value': new.indices}
    else:
        new_vals_dict = {'value': ['']}
    table.source.data = new_vals_dict

source.on_change('selected', update_table)

curdoc().add_root(row(children=[p, table]))

Примечание : при обновлении до последней версии Bokeh вы можете использовать новые Selection объекты. Вам нужно только получить доступ к выбранным индексам, например так: new.indices

...