2016-06-28 16 views
9

ユーザーがデータテーブルから行をクリックした後、コールバックイベントで日付に関する他のデータをプロットしたいと思います。グラフをプロットするon_click bokeh pythonでデータテーブルの行を選択する2.7

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から行をクリックすると、基本的に、私は(この場合は日付に)最初の列名に対応するプロットを表示したい

私はボケ味がかなり新しいですので、私イベントリスナーがデータテーブルのon_clickのどこにあるのかはよく分かりません。

すべてのヘルプはこれがbokeh-server(0.12.3)アプリで働く感謝..

答えて

0

をいただければ幸いです。

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を使用してに変更をプッシュすることが可能ですそれ。こうすることで、クリックで完全な再描画を避けることができ、より良いUXにつながります。

enter image description here