散景 - 使用回调来更新渲染器和DataTable的来源?

时间:2018-05-18 18:58:16

标签: python datatable callback bokeh

我最近选择学习散景,但我完全失去了回调的功能。

我想要做的是使用PointDrawTool更新源代码。它会更新绘图和表格,但显然它不会更新渲染器或源。这让我很困惑,我会感激一些帮助。

我的工作内容如下:

from bokeh.models.glyphs import Circle
from bokeh.plotting import figure, show, output_notebook, Column, Row
from bokeh import events
from bokeh.models import DataTable, TableColumn, PointDrawTool, ColumnDataSource, CustomJS

output_notebook()

p = figure(width = 400, height = 600)

source = ColumnDataSource({
    'x': [38], 'y': [-12], 'color': ['red']
})

renderer = p.circle(x='x', y='y',
                    source=source,
                    color='color',
                    size=10)

columns = [TableColumn(field="x", title="x"),
           TableColumn(field="y", title="y"),
           TableColumn(field='color', title='color')]

table = DataTable(source=source, columns=columns, editable=True, height=200)

draw_tool = PointDrawTool(renderers=[renderer],
                          empty_value='red')

p.add_tools(draw_tool)
p.toolbar.active_tap = draw_tool

show(Row(p,table))

1 个答案:

答案 0 :(得分:0)

使用渲染图表的方法(show),无法更新图表的来源(除非您编写自定义JavaScript来执行此操作)。为了实现这一点,您需要使用Bokeh服务器,如here所述。

基本上,将所有代码放在名为' main.py'的文件中,然后将其保存在包含项目名称的文件夹中。然后在终端运行

bokeh serve --show project_name

之前我没有使用过PointDrawTool,但如果它是一个小部件,你还需要编写函数来编写如何更新源数据,使用on_clickon_change描述的方法here