在散景中按下按钮时如何更改数据帧?

时间:2018-07-12 15:05:43

标签: python bokeh

我正在尝试为我的数据框设计一个前端显示器。我想放一个按钮,选择过滤我的数据框。我尝试阅读文档和示例示例,但直到现在我都没有成功。 这是我的代码供参考:

source = ColumnDataSource(data=dict())
act=""

def act_good():
    global act
    act='Good'

def update():
    current = data[data['Activity']==act]
    source.data = {
        'Tag'             :current.Tag,
        'UpdateQuality'   : current.UpdateQuality,
        'Activity' : current.Activity
    }


checkbox_act_good = RadioButtonGroup(
        labels=["Activity Good"])
checkbox_act_good.on_click(act_good())


columns = [
    TableColumn(field="Tag", title="Tag"),
    TableColumn(field="UpdateQuality", title="Quality"),
    TableColumn(field="Activity", title="Activity")
]

data_table = DataTable(source=source, columns=columns, width=800)
controls = widgetbox(slider,button,checkbox_group,but)
table = widgetbox(data_table)
curdoc().add_root(row(controls, table))
update()

这是我第一次使用bokeh。

1 个答案:

答案 0 :(得分:1)

您可以用不同的方式进行更新。例如,您可以创建一个新的ColumnDataSource并更新DataTable源,如下所示:

from bokeh.models import ColumnDataSource
from bokeh.models.widgets.tables import DataTable, TableColumn
from bokeh.models.widgets.buttons import Button
from bokeh.layouts import column
from bokeh.io import curdoc


columns = [
    TableColumn(field="x", title="X"),
    TableColumn(field="x", title="Y"),
]
init_source = ColumnDataSource(data=dict(x=[''],y=['']))
table = DataTable(
    source=init_source,
    columns=columns,
    reorderable=False,
)

def update_table():
    new_source = ColumnDataSource(dict(
        x=[1, 2, 3, 4, 5, 6],
        y=[1, 2, 3, 4, 5, 6],
    ))
    table.source.data = new_source.data

bt = Button(
    label="Update Table",
    button_type="success",
    width=50
)

bt.on_click(update_table)

curdoc().add_root(column(children=[table, bt]))

使用bokeh serve --show filepath/file.py启动此文件。您可以像这样使用DataFrame作为CDS参数:ColumnDataSource(df)来创建CDS。