这是我想象的一件非常简单的事情,但我不知道该怎么做。 我有一个包含三列的数据表。两个是绘制的数值,一个是字符串。我希望用户能够输入一个字段,并在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))
答案 0 :(得分:0)
使用show
方法渲染图表是正确的,您需要使用自定义JavaScript在图表更新数据源上创建窗口小部件。 show
方法将Python中编程的任何内容呈现为HTML文档,但一旦呈现,HTML文档就无法进一步与Python代码交互。
另一种方法是使用Bokeh服务器,如documented所示。基本上,您可以将所有代码放在文件main.py
中,将该文件放在包含项目名称的文件夹中,然后在该项目文件夹的父目录的终端中运行:
bokeh serve --show project_folder_name
您还需要为here所述的文字输入编写on_change
方法。