From 95bea34726e92162561521954cacbd60389c2fe7 Mon Sep 17 00:00:00 2001 From: Hamish Graham <hgraham@hpc-201-11-01-a.cr.cnaf.infn.it> Date: Fri, 3 Sep 2021 11:52:45 +0200 Subject: [PATCH] most recent version of pandas_bokeh --- examples/hamish_example/pandas_bokeh2.py | 71 +++++++++++++++++------- 1 file changed, 51 insertions(+), 20 deletions(-) diff --git a/examples/hamish_example/pandas_bokeh2.py b/examples/hamish_example/pandas_bokeh2.py index 5a82f68..daa4b40 100644 --- a/examples/hamish_example/pandas_bokeh2.py +++ b/examples/hamish_example/pandas_bokeh2.py @@ -7,8 +7,7 @@ from bokeh.models import ColumnDataSource, Slider, WheelZoomTool, BoxZoomTool, B from bokeh.plotting import figure from bokeh.themes import Theme from bokeh.io import show, output_notebook - -output_notebook() +from bokeh.models import Select #root = tm.tree_from_json(filename='/home/HPC/sterbini/DA_study_example/study_000/tree.json') @@ -17,8 +16,10 @@ def bkapp(doc, root, last_key, choose_color): This creates an interactive plot showing a tree of jobs in a 'flower' shape. """ global my_df - global source1 - global source2 + global source + global my_df_plot + #global source1 + #global source2 try: ps.create_tree(root) @@ -33,21 +34,31 @@ def bkapp(doc, root, last_key, choose_color): del my_df['handle'] - def callback(attr, index_list, _): + my_df_plot = my_df + + + def callback(attr, _, index_list): global my_df global my_df_selected - source1.data = ColumnDataSource.from_df(my_df[my_df.status == last_key]) - source2.data = ColumnDataSource.from_df(my_df[my_df.status != last_key]) - my_df_selected = my_df.loc[index_list] + global my_df_plot + #print(index_list) + #source = ColumnDataSource(data=my_df_plot) + source.data = ColumnDataSource.from_df(my_df_plot) + #source1.data = ColumnDataSource.from_df(my_df[my_df.status == last_key]) + #source2.data = ColumnDataSource.from_df(my_df[my_df.status != last_key]) + my_df_selected = my_df_plot.loc[index_list] - def dummyfunction(): + def initialise(): + global my_df_plot global my_df + my_df_plot = ps.update(my_df_plot, last_key, choose_color) my_df = ps.update(my_df, last_key, choose_color) - dummyfunction() + initialise() - source1 = ColumnDataSource(data=my_df[my_df.status == last_key]) - source2 = ColumnDataSource(data=my_df[my_df.status != last_key]) + source = ColumnDataSource(data=my_df_plot) + #source1 = ColumnDataSource(data=my_df[my_df.status == last_key]) + #source2 = ColumnDataSource(data=my_df[my_df.status != last_key]) TOOLTIPS = [ ('index', "@index"), @@ -55,18 +66,38 @@ def bkapp(doc, root, last_key, choose_color): ('path', "@path") ] plot = figure(plot_width=400, plot_height=400, tools="lasso_select", title="Select Here", tooltips = TOOLTIPS) - plot.circle('x', 'y', source=source1, alpha=0.6, color = 'color', legend_label = last_key) - plot.circle('x', 'y', source=source2, alpha=0.6, color = 'color', legend_label = f'not {last_key}') + plot.circle('x', 'y', source=source, alpha=0.6, color = 'color') + #plot.circle('x', 'y', source=source1, alpha=0.6, color = 'color', legend_label = last_key) + #plot.circle('x', 'y', source=source2, alpha=0.6, color = 'color', legend_label = f'not {last_key}') plot.add_tools(BoxZoomTool(), WheelZoomTool(), PanTool()) - plot.legend.location = "top_left" - plot.legend.click_policy="hide" + #plot.legend.location = "top_left" + #plot.legend.click_policy="hide" + + source.selected.on_change('indices', callback) + #source1.selected.on_change('indices', callback) + #source2.selected.on_change('indices', callback) - source1.selected.on_change('indices', callback) - source2.selected.on_change('indices', callback) + select = Select(title="Option:", value="plot", options=["full_df", f"{last_key}", f"not {last_key}"]) + def callback1(attr, old, new): + global my_df_plot + if new == "full_df": + my_df_plot = my_df.copy() + if new == f"{last_key}": + my_df_plot = my_df[my_df.status == last_key].copy() + if new == f"not {last_key}": + my_df_plot = my_df[my_df.status != last_key].copy() + my_df_plot.reset_index(drop=True, inplace=True) + source.data = ColumnDataSource.from_df(my_df_plot) + #source = ColumnDataSource(data=my_df_plot) + + #print(new) + + select.on_change('value', callback1) + button = Button(label="Update", button_type="success") - button.on_click(dummyfunction) + button.on_click(initialise) - doc.add_root(column(plot, button)) + doc.add_root(column(plot, button, select)) \ No newline at end of file -- GitLab