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