我想从下面的代码中,当用户单击数据表中的一行然后在回调事件上时,我想绘制有关日期的其他数据。
from datetime import date
from random import randint
from bokeh.models import ColumnDataSource
from bokeh.models.widgets
import DataTable, DateFormatter, TableColumn
from bokeh.io import output_file, show, vform
output_file("data_table.html")
data = dict(
dates=[date(2014, 3, i+1) for i in range(10)],
downloads=[randint(0, 100) for i in range(10)],
)
source = ColumnDataSource(data)
columns = [
TableColumn(field="dates", title="Date", formatter=DateFormatter()),
TableColumn(field="downloads", title="Downloads"),
]
data_table = DataTable(source=source, columns=columns, width=400, height=280)
show(vform(data_table))
基本上,当我单击data_table中的一行时,我想显示与第一列名称相对应的图(在这种情况下为日期)
我对bokeh很陌生,所以我不太了解ontable在数据表上的事件监听器在哪里。
任何帮助,将不胜感激谢谢..
最佳答案
这适用于bokeh-server(0.12.3)应用程序:
from datetime import date
from random import randint
from bokeh.models import ColumnDataSource
from bokeh.models.widgets import DataTable, DateFormatter, TableColumn
import bokeh.layouts as layouts
import bokeh.models.widgets as widgets
from bokeh.io import curdoc
from bokeh.charts import Line
import numpy as np
data = dict(
dates=[date(2014, 3, i + 1) for i in range(10)],
downloads=[randint(0, 100) for i in range(10)],
)
d_source = ColumnDataSource(data)
columns = [
TableColumn(field="dates", title="Date", formatter=DateFormatter()),
TableColumn(field="downloads", title="Downloads"),
]
data_table = DataTable(source=d_source, columns=columns, width=400, height=280)
data_table.row_headers = False
def table_select_callback(attr, old, new):
selected_row = new['1d']['indices'][0]
download_count = data['downloads'][selected_row]
chart_data = np.random.uniform(0, 100, size=download_count)
fig = Line(chart_data, height=250, width=600)
fig.title.text = "Download times - {}".format(data['dates'][selected_row])
root_layout.children[1] = fig
d_source.on_change('selected', table_select_callback)
root_layout = layouts.Column(data_table, widgets.Div(text='Select Date'))
curdoc().add_root(root_layout)
注意:可以为折线图使用另一个ColumnDataSource并将更改推送到它。这样,您可以避免点击完全重画,从而获得更好的用户体验。
关于python-2.7 - 在bokeh python 2.7中绘制图on_click Datatable行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38078894/