@@ -267,7 +267,7 @@ def tunit_edges(self, vals=None, M=None):
267
267
(tc [7 ], tc [4 ])]
268
268
return edges
269
269
270
- def set_aspect (self , aspect , adjustable = None , anchor = None , share = False ):
270
+ def set_aspect (self , aspect , adjustable = 'datalim' , anchor = None , share = False ):
271
271
"""
272
272
Set the aspect ratios.
273
273
@@ -336,17 +336,42 @@ def set_aspect(self, aspect, adjustable=None, anchor=None, share=False):
336
336
view_intervals = np .array ([self .xaxis .get_view_interval (),
337
337
self .yaxis .get_view_interval (),
338
338
self .zaxis .get_view_interval ()])
339
- mean = np .mean (view_intervals , axis = 1 )
340
- ptp = np .ptp (view_intervals , axis = 1 )
341
- delta = max (ptp [ax_indices ])
342
- scale = self ._box_aspect [ptp == delta ][0 ]
343
- deltas = delta * self ._box_aspect / scale
344
-
345
- for i , set_lim in enumerate ((self .set_xlim3d ,
346
- self .set_ylim3d ,
347
- self .set_zlim3d )):
348
- if i in ax_indices :
349
- set_lim (mean [i ] - deltas [i ]/ 2. , mean [i ] + deltas [i ]/ 2. )
339
+ if adjustable == 'datalim' :
340
+ mean = np .mean (view_intervals , axis = 1 )
341
+ ptp = np .ptp (view_intervals , axis = 1 )
342
+ delta = max (ptp [ax_indices ])
343
+ scale = self ._box_aspect [ptp == delta ][0 ]
344
+ deltas = delta * self ._box_aspect / scale
345
+
346
+ for i , set_lim in enumerate ((self .set_xlim3d ,
347
+ self .set_ylim3d ,
348
+ self .set_zlim3d )):
349
+ if i in ax_indices :
350
+ set_lim (mean [i ] - deltas [i ]/ 2. , mean [i ] + deltas [i ]/ 2. )
351
+ elif adjustable == 'box' :
352
+ deltas = np .ptp (view_intervals , axis = 1 )
353
+ box_aspect = self .get_box_aspect ()
354
+ if aspect == 'equal' :
355
+ box_aspect = np .ptp (view_intervals , axis = 1 )
356
+ elif aspect == 'equalxy' :
357
+ old_diag = box_aspect [0 ] ** 2 + box_aspect [1 ] ** 2
358
+ new_diag = deltas [0 ] ** 2 + deltas [1 ] ** 2
359
+ box_aspect [0 ] = deltas [0 ]
360
+ box_aspect [1 ] = deltas [1 ]
361
+ box_aspect [2 ] *= new_diag / old_diag
362
+ elif aspect == 'equalxz' :
363
+ old_diag = box_aspect [0 ] ** 2 + box_aspect [2 ] ** 2
364
+ new_diag = deltas [0 ] ** 2 + deltas [2 ] ** 2
365
+ box_aspect [0 ] = deltas [0 ]
366
+ box_aspect [1 ] *= new_diag / old_diag
367
+ box_aspect [2 ] = deltas [2 ]
368
+ elif aspect == 'equalyz' :
369
+ old_diag = box_aspect [1 ] ** 2 + box_aspect [2 ] ** 2
370
+ new_diag = deltas [1 ] ** 2 + deltas [2 ] ** 2
371
+ box_aspect [0 ] *= new_diag / old_diag
372
+ box_aspect [1 ] = deltas [1 ]
373
+ box_aspect [2 ] = deltas [2 ]
374
+ self .set_box_aspect (box_aspect )
350
375
351
376
def set_box_aspect (self , aspect , * , zoom = 1 ):
352
377
"""
0 commit comments