@@ -43,9 +43,11 @@ def run(self):
4343 sim_df = self .sim_df .copy ()
4444 if sim_df .empty :
4545 sim_df = None
46-
47- try :
48- if self .vis_df is not None :
46+ if self .group_by == "vis_df" and self .vis_df .empty :
47+ print ("Empty Vis DF. Falling back to grouping by observable." )
48+ self .group_by = "observable"
49+ if self .group_by == "vis_df" :
50+ try :
4951 petab_vis .plot_with_vis_spec (
5052 self .vis_df ,
5153 self .cond_df ,
@@ -55,8 +57,11 @@ def run(self):
5557 fig = plt .gcf ()
5658 self .signals .finished .emit (fig )
5759 return
58- except Exception as e :
59- print (f"Invalid Visualisation DF: { e } " )
60+ except Exception as e :
61+ print (f"Invalid Visualisation DF: { e } " )
62+ plt .gcf ()
63+ self .signals .finished .emit (fig )
64+ return
6065
6166 # Fallback
6267 plt .close ("all" )
@@ -100,11 +105,11 @@ def __init__(self, parent=None):
100105 self .update_timer .timeout .connect (self .plot_it )
101106 self .observable_to_subplot = {}
102107
103- def initialize (self , meas_proxy , sim_proxy , cond_proxy ):
108+ def initialize (self , meas_proxy , sim_proxy , cond_proxy , vis_proxy ):
104109 self .meas_proxy = meas_proxy
105110 self .cond_proxy = cond_proxy
106111 self .sim_proxy = sim_proxy
107- self .vis_df = None
112+ self .vis_proxy = vis_proxy
108113
109114 # Connect data changes
110115 self .options_manager .option_changed .connect (self ._debounced_plot )
@@ -117,6 +122,9 @@ def initialize(self, meas_proxy, sim_proxy, cond_proxy):
117122 self .sim_proxy .dataChanged .connect (self ._debounced_plot )
118123 self .sim_proxy .rowsInserted .connect (self ._debounced_plot )
119124 self .sim_proxy .rowsRemoved .connect (self ._debounced_plot )
125+ self .vis_proxy .dataChanged .connect (self ._debounced_plot )
126+ self .vis_proxy .rowsInserted .connect (self ._debounced_plot )
127+ self .vis_proxy .rowsRemoved .connect (self ._debounced_plot )
120128
121129 self .plot_it ()
122130
@@ -127,13 +135,14 @@ def plot_it(self):
127135 measurements_df = proxy_to_dataframe (self .meas_proxy )
128136 simulations_df = proxy_to_dataframe (self .sim_proxy )
129137 conditions_df = proxy_to_dataframe (self .cond_proxy )
138+ visualisation_df = proxy_to_dataframe (self .vis_proxy )
130139 group_by = self .options_manager .get_option ()
131140 # group_by different value in petab.visualize
132141 if group_by == "condition" :
133142 group_by = "simulation"
134143
135144 worker = PlotWorker (
136- self . vis_df ,
145+ visualisation_df ,
137146 conditions_df ,
138147 measurements_df ,
139148 simulations_df ,
@@ -375,6 +384,9 @@ def __init__(self, canvas, parent):
375384 grp : QAction (f"Groupy by { grp } " , self )
376385 for grp in ["observable" , "dataset" , "condition" ]
377386 }
387+ self .groupy_by_options ["vis_df" ] = QAction (
388+ "Use Visualization DF" , self
389+ )
378390 for grp , action in self .groupy_by_options .items ():
379391 action .setCheckable (True )
380392 action .triggered .connect (lambda _ , grp = grp : self .manager .set_option (grp ))
0 commit comments