On Nov 21, 2016, at 2:53 AM, [email protected] wrote:
Here is the code:
df = pd.read_csv("foo.csv")
source = ColumnDataSource(df)
original_source = ColumnDataSource(df)
columns = [
TableColumn(field="x", title="x", width=20),
TableColumn(field="y", title="y", width=20),
TableColumn(field="Try", title="Try", width=10),
TableColumn(field="N", title="N", width=60),
]
data_table = DataTable(source=source, columns=columns, height=700, row_headers=False)
# callback code to be used by all the filter widgets
combined_callback_code = """
var data = source.get('data');
var original_data = original_source.get('data');
var Try = Try_select_obj.get('value');
var n = n_select_obj.get('value');
var x = x_slide_obj.get('value');
for (var key in original_data) {
data[key] = ;
for (var i = 0; i < original_data['Try'].length; ++i) {
if ((Try === "ALL" || original_data['Try'][i] === parseInt(Try,10)) &&
(n === "ALL" || original_data['N'][i] === n) &&
(original_data['x'][i] >= x) {
data[key].push(original_data[key][i]);
}
}
}
target_obj.trigger('change');
source.trigger('change');
Try_list.trigger('change');
n_list.trigger('change');
n_select.trigger('change');
console.log("source updated " );
"""
# define the filter widgets, without callbacks for now
Try_list = ['ALL'] + sorted(set([str(z) for z in source.data['Try']]))
Try_select = Select(title="Try:",options=Try_list, value=Try_list[0], width=200)
n_list = ['ALL'] + sorted(set((source.data['N'])))
n_select = Select(title="N: (expected: 024C4E12)", value=n_list[0], options=n_list, width=200)
x_slide = Slider(start=0, end=1500, value=0, step=1, title="x", width=200)
# now define the callback objects now that the filter widgets exist
common_callback = CustomJS(
args=dict(source=source,
original_source=original_source,
Try_select_obj=Try_select,
n_select_obj=n_select,
x_slide_obj=x_slide,
target_obj=data_table),
code=combined_callback_code)
# finally, connect the callbacks to the filter widgets
Try_select.callback = common_callback
n_select.callback = common_callback
x_slide.callback = common_callback
TOOLS="hover,crosshair,pan,wheel_zoom,box_zoom,undo,redo,reset,tap,save,box_select,poly_select,lasso_select"
plot = figure(x_range=(0,1500),y_range=(0,1500),tools=TOOLS, width=800, height=800)
plot.min_border_right = 50
plot.image_url(url=['foo.jpg'], x=-22, y=-72,w=1476,h=1033,anchor='bottom_left', alpha=0.7, angle=-0.0)
plot.circle('x','y', source=source, size=3, color='yellow')
output_file("Centaurus1.html", mode='inline', title="Centaurus 1 laser attacks")
layout=row(plot,column(x_slide,Try_select, n_select, sizing_mode='fixed', width=250), data_table)
show(layout)
So for example when x_slide is modified I would like that n_list and Try_list update automatically.
I thought it was done through source.trigger('change').
David
Le dimanche 20 novembre 2016 17:44:59 UTC+1, Bryan Van de ven a écrit :
It's definitely possible to e.g. update one select widget's values based on another select widget's choice. But I'm on a phone and don't have code handy. Maybe you can share some code of what you've tried that hasn't worked. It's always advised to share code when asking for help.
Thanks,
Bryan
On Nov 20, 2016, at 09:11, david...@gmail.com wrote:
Hello,
I can not manage to update a select widget options with an other widget slider for example.
If I have a table with 'x' and 'value' columns, a slider widget for 'x' and a select widget for 'value, and if I want to filter table with 'x' higher than 10 for example, the datatable will be updated and also the plot if any, but not the select widget. It will keep alll possible values in its options.
Maybe it is impossible to do it.
Can someone confirm?
Thanks.
David
--
You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+un...@continuum.io.
To post to this group, send email to bo...@continuum.io.
To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/793620e7-ae18-48fc-8bb9-28cd093c5481%40continuum.io\.
For more options, visit https://groups.google.com/a/continuum.io/d/optout\.
--
You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/0d6f956b-fcba-40f7-bba4-9ec6e704ff4c%40continuum.io\.
For more options, visit https://groups.google.com/a/continuum.io/d/optout\.