散景:使用TextInput小部件选择ColumnDataSource行

时间:2018-05-22 09:47:38

标签: javascript python input bokeh slickgrid

这是我想象的一件非常简单的事情,但我不知道该怎么做。 我有一个包含三列的数据表。两个是绘制的数值,一个是字符串。我希望用户能够输入一个字段,并在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 :(得分:0)

使用show方法渲染图表是正确的,您需要使用自定义JavaScript在图表更新数据源上创建窗口小部件。 show方法将Python中编程的任何内容呈现为HTML文档,但一旦呈现,HTML文档就无法进一步与Python代码交互。

另一种方法是使用Bokeh服务器,如documented所示。基本上,您可以将所有代码放在文件main.py中,将该文件放在包含项目名称的文件夹中,然后在该项目文件夹的父目录的终端中运行:

bokeh serve --show project_folder_name

您还需要为here所述的文字输入编写on_change方法。