python-2.7 - 在bokeh python 2.7中绘制图on_click Datatable行选择

标签 python-2.7 plot bokeh

我想从下面的代码中,当用户单击数据表中的一行然后在回调事件上时,我想绘制有关日期的其他数据。

 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并将更改推送到它。这样,您可以避免点击完全重画,从而获得更好的用户体验。

enter image description here

关于python-2.7 - 在bokeh python 2.7中绘制图on_click Datatable行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38078894/

相关文章:

Bokeh 中的日期时间轴

Django 强制 makemigrations 使用制表符而不是空格

python - 如何从 ASN1 语法解析对象类以在 pyasn1 中使用?

python matplotlib imshow() 自定义刻度线

c - 如何在MATLAB或C语言中找到矩形对角线的坐标?

python-3.x - 无法对未注册的加载程序类型执行此操作

python - 具有可变宽度线的 Bokeh 线图

python - 如何在 python 浮点值中添加/减去最小可能值?

python - 为什么 ";"违反格式标准而存在?

plot - Julia 组按名称和总结计数