2016-06-28 26 views
9

Vorrei dal seguente codice che quando l'utente fa clic su una riga dal datatable quindi sull'evento di richiamata desidero stampare altri dati sulla data.Tracciare un grafico on_click Selezione della riga Datatable in 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)) 

In sostanza, quando si fa clic su una riga dalla data_table, voglio visualizzare un grafico che corrisponde al nome di colonna (in questa data caso)

Sono abbastanza nuovo per bokeh, così ho non capisco dove si trova il listener di eventi per l'on_click sul datatable.

Qualsiasi aiuto sarebbe apprezzato grazie ..

risposta

0

Questo funziona in bokeh-server (0.12.3) app:

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) 

Nota: è possibile utilizzare un altro ColumnDataSource per grafico a linee e spingere modifiche esso. In questo modo è possibile evitare il ridisegno completo al clic, che porta a una migliore UX.

enter image description here

Problemi correlati