8989
9090VD_SEED = 42
9191
92- VD_DIM = 3
93-
9492# S_* are reusable session stored objects
9593
9694S_RESULTS = 'stored_results'
@@ -109,6 +107,7 @@ def __init__(self):
109107 self .df_summary = pd .DataFrame ()
110108 self .mapper_graph = None
111109 self .mapper_plot = None
110+ self .mapper_dim = None
112111 self .mapper_fig = None
113112 self .mapper_fig_outdated = True
114113 self .auto_rendering = self ._auto_rendering ()
@@ -130,34 +129,37 @@ def set_df(self, X, y):
130129 self .df_summary = _get_data_summary (self .df_X , self .df_y )
131130 self .mapper_graph = None
132131 self .mapper_plot = None
132+ self .mapper_dim = None
133133 self .mapper_fig = None
134134 self .mapper_fig_outdated = True
135135 self .auto_rendering = self ._auto_rendering ()
136136
137137 def set_mapper (self , mapper_graph ):
138138 self .mapper_graph = mapper_graph
139139 self .mapper_plot = None
140+ self .mapper_dim = None
140141 self .mapper_fig = None
141142 self .mapper_fig_outdated = True
142143 self .auto_rendering = self ._auto_rendering ()
143144
144- def set_mapper_fig (self , seed , color_feat , agg , cmap , title ):
145+ def set_mapper_fig (self , dim , seed , color_feat , agg , cmap , title ):
145146 colors = self .X
146147 df_all = st .session_state [S_RESULTS ].df_all
147148 if color_feat in df_all .columns :
148149 df_col = df_all [color_feat ]
149150 colors = df_col .to_numpy ()
150- if self .mapper_plot is None :
151+ if ( self .mapper_plot is None ) or ( dim != self . mapper_dim ) :
151152 self .mapper_plot = MapperLayoutInteractive (
152153 self .mapper_graph ,
153- dim = VD_DIM ,
154+ dim = dim ,
154155 seed = seed ,
155156 colors = colors ,
156157 agg = agg ,
157158 cmap = cmap ,
158159 title = title ,
159160 height = 500 ,
160161 width = 500 )
162+ self .mapper_dim = dim
161163 else :
162164 self .mapper_plot .update (
163165 seed = seed ,
@@ -169,6 +171,13 @@ def set_mapper_fig(self, seed, color_feat, agg, cmap, title):
169171 self .mapper_fig .update_layout (
170172 uirevision = 'constant' ,
171173 margin = dict (b = 0 , l = 0 , r = 0 , t = 0 ))
174+ self .mapper_fig .update_xaxes (
175+ #constrain='domain',
176+ showline = False )
177+ self .mapper_fig .update_yaxes (
178+ showline = False ,
179+ scaleanchor = 'x' ,
180+ scaleratio = 1 )
172181 self .mapper_fig_outdated = False
173182
174183
@@ -289,8 +298,8 @@ def _update_mapper(X, lens, cover, clustering):
289298 st .toast ('Automatic Rendering Disabled: Graph Too Large' , icon = '⚠️' )
290299
291300
292- def _update_fig (seed , color_feat , agg , cmap , title ):
293- st .session_state [S_RESULTS ].set_mapper_fig (seed , color_feat , agg , cmap , title )
301+ def _update_fig (dim , seed , color_feat , agg , cmap , title ):
302+ st .session_state [S_RESULTS ].set_mapper_fig (dim , seed , color_feat , agg , cmap , title )
294303 st .toast ('Successfully Rendered Graph' , icon = '🖌️' )
295304
296305
@@ -433,6 +442,15 @@ def _mapper_aggregation():
433442 return agg , agg_name
434443
435444
445+ def _mapper_dim ():
446+ toggle_3d = st .toggle (
447+ '3D Rendering' ,
448+ value = True ,
449+ on_change = _update_mapper_fig_outdated )
450+ dim = 3 if toggle_3d else 2
451+ return dim
452+
453+
436454def _mapper_seed ():
437455 seed = st .number_input (
438456 '🎲 Seed' ,
@@ -612,6 +630,7 @@ def mapper_color_section():
612630
613631
614632def mapper_draw_section (color_feat ):
633+ dim = _mapper_dim ()
615634 seed = _mapper_seed ()
616635 cmap = _mapper_cmap ()
617636 agg , agg_name = _mapper_aggregation ()
@@ -624,9 +643,9 @@ def mapper_draw_section(color_feat):
624643 auto_rendering = st .session_state [S_RESULTS ].auto_rendering
625644 title = f'{ agg_name } of { color_feat } '
626645 if auto_rendering and mapper_fig_outdated :
627- _update_fig (seed , color_feat , agg , cmap , title )
646+ _update_fig (dim , seed , color_feat , agg , cmap , title )
628647 elif update_button :
629- _update_fig (seed , color_feat , agg , cmap , title )
648+ _update_fig (dim , seed , color_feat , agg , cmap , title )
630649
631650
632651def data_summary_section ():
0 commit comments