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

Skip to content

Commit 8b58763

Browse files
Do not add padding to 3D axis limits when limits are manually set
1 parent de8e9d0 commit 8b58763

File tree

3 files changed

+25
-29
lines changed

3 files changed

+25
-29
lines changed

lib/matplotlib/axis.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -841,13 +841,14 @@ def _get_autoscale_on(self):
841841
def _set_autoscale_on(self, b):
842842
"""
843843
Set whether this Axis is autoscaled when drawing or by
844-
`.Axes.autoscale_view`.
844+
`.Axes.autoscale_view`. If b is None, then the value is not changed.
845845
846846
Parameters
847847
----------
848848
b : bool
849849
"""
850-
self._autoscale_on = b
850+
if b is not None:
851+
self._autoscale_on = b
851852

852853
def get_children(self):
853854
return [self.label, self.offsetText,
@@ -1225,8 +1226,7 @@ def _set_lim(self, v0, v1, *, emit=True, auto):
12251226
# Mark viewlims as no longer stale without triggering an autoscale.
12261227
for ax in self._get_shared_axes():
12271228
ax._stale_viewlims[name] = False
1228-
if auto is not None:
1229-
self._set_autoscale_on(bool(auto))
1229+
self._set_autoscale_on(auto)
12301230

12311231
if emit:
12321232
self.axes.callbacks.process(f"{name}lim_changed", self.axes)

lib/mpl_toolkits/mplot3d/axes3d.py

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,10 @@ def __init__(
158158
self.set_axis_on()
159159
self.M = None
160160

161+
# Initialize margins, which calls autoscale_view
162+
margin = 1/48 # default value
163+
self.margins(x=margin, y=margin, z=margin)
164+
161165
# func used to format z -- fall back on major formatters
162166
self.fmt_zdata = None
163167

@@ -581,17 +585,17 @@ def autoscale(self, enable=True, axis='both', tight=None):
581585
scalez = True
582586
else:
583587
if axis in ['x', 'both']:
584-
self.set_autoscalex_on(bool(enable))
588+
self.set_autoscalex_on(enable)
585589
scalex = self.get_autoscalex_on()
586590
else:
587591
scalex = False
588592
if axis in ['y', 'both']:
589-
self.set_autoscaley_on(bool(enable))
593+
self.set_autoscaley_on(enable)
590594
scaley = self.get_autoscaley_on()
591595
else:
592596
scaley = False
593597
if axis in ['z', 'both']:
594-
self.set_autoscalez_on(bool(enable))
598+
self.set_autoscalez_on(enable)
595599
scalez = self.get_autoscalez_on()
596600
else:
597601
scalez = False
@@ -616,8 +620,8 @@ def auto_scale_xyz(self, X, Y, Z=None, had_data=None):
616620
# Let autoscale_view figure out how to use this data.
617621
self.autoscale_view()
618622

619-
def autoscale_view(self, tight=None, scalex=True, scaley=True,
620-
scalez=True):
623+
def autoscale_view(self, tight=None,
624+
scalex=True, scaley=True, scalez=True):
621625
"""
622626
Autoscale the view limits using the data limits.
623627
@@ -1169,9 +1173,9 @@ def drag_pan(self, button, key, x, y):
11691173
dz = (maxz - minz) * duvw_projected[2]
11701174

11711175
# Set the new axis limits
1172-
self.set_xlim3d(minx + dx, maxx + dx)
1173-
self.set_ylim3d(miny + dy, maxy + dy)
1174-
self.set_zlim3d(minz + dz, maxz + dz)
1176+
self.set_xlim3d(minx + dx, maxx + dx, auto=None)
1177+
self.set_ylim3d(miny + dy, maxy + dy, auto=None)
1178+
self.set_zlim3d(minz + dz, maxz + dz, auto=None)
11751179

11761180
def _calc_view_axes(self, eye):
11771181
"""
@@ -1308,9 +1312,9 @@ def _scale_axis_limits(self, scale_x, scale_y, scale_z):
13081312
dz = (maxz - minz)*scale_z
13091313

13101314
# Set the scaled axis limits
1311-
self.set_xlim3d(cx - dx/2, cx + dx/2)
1312-
self.set_ylim3d(cy - dy/2, cy + dy/2)
1313-
self.set_zlim3d(cz - dz/2, cz + dz/2)
1315+
self.set_xlim3d(cx - dx/2, cx + dx/2, auto=None)
1316+
self.set_ylim3d(cy - dy/2, cy + dy/2, auto=None)
1317+
self.set_zlim3d(cz - dz/2, cz + dz/2, auto=None)
13141318

13151319
def set_zlabel(self, zlabel, fontdict=None, labelpad=None, **kwargs):
13161320
"""

lib/mpl_toolkits/mplot3d/axis3d.py

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -241,22 +241,12 @@ def get_rotate_label(self, text):
241241
else:
242242
return len(text) > 4
243243

244-
def _get_coord_info(self, renderer):
244+
def _get_coord_info(self):
245245
mins, maxs = np.array([
246246
self.axes.get_xbound(),
247247
self.axes.get_ybound(),
248248
self.axes.get_zbound(),
249249
]).T
250-
251-
# Get the mean value for each bound:
252-
centers = 0.5 * (maxs + mins)
253-
254-
# Add a small offset between min/max point and the edge of the
255-
# plot:
256-
deltas = (maxs - mins) / 12
257-
mins -= 0.25 * deltas
258-
maxs += 0.25 * deltas
259-
260250
# Project the bounds along the current position of the cube:
261251
bounds = mins[0], maxs[0], mins[1], maxs[1], mins[2], maxs[2]
262252
bounds_proj = self.axes._tunit_cube(bounds, self.axes.M)
@@ -280,7 +270,7 @@ def _get_coord_info(self, renderer):
280270
elif vertical == 0: # looking at YZ plane
281271
highs = np.array([highs[0], False, False])
282272

283-
return mins, maxs, centers, deltas, bounds_proj, highs
273+
return mins, maxs, bounds_proj, highs
284274

285275
def _get_axis_line_edge_points(self, minmax, maxmin):
286276
"""Get the edge points for the black bolded axis line."""
@@ -331,7 +321,7 @@ def draw_pane(self, renderer):
331321
"""
332322
renderer.open_group('pane3d', gid=self.get_gid())
333323

334-
mins, maxs, centers, deltas, tc, highs = self._get_coord_info(renderer)
324+
mins, maxs, tc, highs = self._get_coord_info()
335325

336326
info = self._axinfo
337327
index = info['i']
@@ -357,7 +347,9 @@ def draw(self, renderer):
357347
index = info["i"]
358348
juggled = info["juggled"]
359349

360-
mins, maxs, centers, deltas, tc, highs = self._get_coord_info(renderer)
350+
mins, maxs, tc, highs = self._get_coord_info()
351+
centers = 0.5 * (maxs + mins)
352+
deltas = (maxs - mins) / 12 # label offsets
361353

362354
minmax = np.where(highs, maxs, mins)
363355
maxmin = np.where(~highs, maxs, mins)

0 commit comments

Comments
 (0)