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