Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit aa9592c

Browse files
committed
Provide adjustable=box for aspect(equal) in 3D.
1 parent 65cbdef commit aa9592c

File tree

1 file changed

+37
-12
lines changed

1 file changed

+37
-12
lines changed

lib/mpl_toolkits/mplot3d/axes3d.py

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ def tunit_edges(self, vals=None, M=None):
267267
(tc[7], tc[4])]
268268
return edges
269269

270-
def set_aspect(self, aspect, adjustable=None, anchor=None, share=False):
270+
def set_aspect(self, aspect, adjustable='datalim', anchor=None, share=False):
271271
"""
272272
Set the aspect ratios.
273273
@@ -336,17 +336,42 @@ def set_aspect(self, aspect, adjustable=None, anchor=None, share=False):
336336
view_intervals = np.array([self.xaxis.get_view_interval(),
337337
self.yaxis.get_view_interval(),
338338
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)
350375

351376
def set_box_aspect(self, aspect, *, zoom=1):
352377
"""

0 commit comments

Comments
 (0)