8000 Do not add padding to 3D axis limits when limits are manually set · matplotlib/matplotlib@12f5ca6 · GitHub
[go: up one dir, main page]

Skip to content

Commit 12f5ca6

Browse files
Do not add padding to 3D axis limits when limits are manually set
1 parent 73394f2 commit 12f5ca6

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
@@ -831,13 +831,14 @@ def _get_autoscale_on(self):
831831
def _set_autoscale_on(self, b):
832832
"""
833833
Set whether this Axis is autoscaled when drawing or by
834-
`.Axes.autoscale_view`.
834+
`.Axes.autoscale_view`. If b is None, then the value is not changed.
835835
836836
Parameters
837837
----------
838838
b : bool
839839
"""
840-
self._autoscale_on = b
840+
if b is not None:
841+
self._autoscale_on = b
841842

842843
def get_children(self):
843844
return [self.label, self.offsetText,
@@ -1220,8 +1221,7 @@ def _set_lim(self, v0, v1, *, emit=True, auto):
12201221
# Mark viewlims as no longer stale without triggering an autoscale.
12211222
for ax in self._get_shared_axes():
12221223
ax._stale_viewlims[name] = False
1223-
if auto is not None:
1224-
self._set_autoscale_on(bool(auto))
1224+
self._set_autoscale_on(auto)
12251225

12261226
if emit:
12271227
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
@@ -157,6 +157,10 @@ def __init__(
157157
self.set_axis_on()
158158
self.M = None
159159

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

@@ -573,17 +577,17 @@ def autoscale(self, enable=True, axis='both', tight=None):
573577
scalez = True
574578
else:
575579
if axis in ['x', 'both']:
576-
self.set_autoscalex_on(bool(enable))
580+
self.set_autoscalex_on(enable)
577581
scalex = self.get_autoscalex_on()
578582
else:
579583
scalex = False
580584
if axis in ['y', 'both']:
581-
self.set_autoscaley_on(bool(enable))
585+
self.set_autoscaley_on(enable)
582586
scaley = self.get_autoscaley_on()
583587
else:
584588
scaley = False
585589
if axis in ['z', 'both']:
586-
self.set_autoscalez_on(bool(enable))
590+
self.set_autoscalez_on(enable)
587591
scalez = self.get_autoscalez_on()
588592
else:
589593
scalez = False
@@ -608,8 +612,8 @@ def auto_scale_xyz(self, X, Y, Z=None, had_data=None):
608612
# Let autoscale_view figure out how to use this data.
609613
self.autoscale_view()
610614

611-
def autoscale_view(self, tight=None, scalex=True, scaley=True,
612-
scalez=True):
615+
def autoscale_view(self, tight=None,
616+
scalex=True, scaley=True, scalez=True):
613617
"""
614618
Autoscale the view limits using the data limits.
615619
@@ -1157,9 +1161,9 @@ def drag_pan(self, button, key, x, y):
11571161
dz = (maxz - minz) * duvw_projected[2]
11581162

11591163
# Set the new axis limits
1160-
self.set_xlim3d(minx + dx, maxx + dx)
1161-
self.set_ylim3d(miny + dy, maxy + dy)
1162-
self.set_zlim3d(minz + dz, maxz + dz)
1164+
self.set_xlim3d(minx + dx, maxx + dx, auto=None)
1165+
self.set_ylim3d(miny + dy, maxy + dy, auto=None)
1166+
self.set_zlim3d(minz + dz, maxz + dz, auto=None)
11631167

11641168
def _calc_view_axes(self, eye):
11651169
"""
@@ -1296,9 +1300,9 @@ def _scale_axis_limits(self, scale_x, scale_y, scale_z):
12961300
dz = (maxz - minz)*scale_z
1297130 8000 1

12981302
# Set the scaled axis limits
1299-
self.set_xlim3d(cx - dx/2, cx + dx/2)
1300-
self.set_ylim3d(cy - dy/2, cy + dy/2)
1301-
self.set_zlim3d(cz - dz/2, cz + dz/2)
1303+
self.set_xlim3d(cx - dx/2, cx + dx/2, auto=None)
1304+
self.set_ylim3d(cy - dy/2, cy + dy/2, auto=None)
1305+
self.set_zlim3d(cz - dz/2, cz + dz/2, auto=None)
13021306

13031307
def set_zlabel(self, zlabel, fontdict=None, labelpad=None, **kwargs):
13041308
"""

lib/mpl_toolkits/mplot3d/axis3d.py

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -215,22 +215,12 @@ def get_rotate_label(self, text):
215215
else:
216216
return len(text) > 4
217217

218-
def _get_coord_info(self, renderer):
218+
def _get_coord_info(self):
219219
mins, maxs = np.array([
220220
self.axes.get_xbound(),
221221
self.axes.get_ybound(),
222222
self.axes.get_zbound(),
223223
]).T
224-
225-
# Get the mean value for each bound:
226-
centers = 0.5 * (maxs + mins)
227-
228-
# Add a small offset between min/max point and the edge of the
229-
# plot:
230-
deltas = (maxs - mins) / 12
231-
mins -= 0.25 * deltas
232-
maxs += 0.25 * deltas
233-
234224
# Project the bounds along the current position of the cube:
235225
bounds = mins[0], maxs[0], mins[1], maxs[1], mins[2], maxs[2]
236226
bounds_proj = self.axes._tunit_cube(bounds, self.axes.M)
@@ -254,7 +244,7 @@ def _get_coord_info(self, renderer):
254244
elif vertical == 0: # looking at YZ plane
255245
highs = np.array([highs[0], False, False])
256246

257-
return mins, maxs, centers, deltas, bounds_proj, highs
247+
return mins, maxs, bounds_proj, highs
258248

259249
def _get_axis_line_edge_points(self, minmax, maxmin):
260250
"""Get the edge points for the black bolded axis line."""
@@ -305,7 +295,7 @@ def draw_pane(self, renderer):
305295
"""
306296
renderer.open_group('pane3d', gid=self.get_gid())
307297

308-
mins, maxs, centers, deltas, tc, highs = self._get_coord_info(renderer)
298+
mins, maxs, tc, highs = self._get_coord_info()
309299

310300
info = self._axinfo
311301
index = info['i']
@@ -332,7 +322,9 @@ def draw(self, renderer):
332322
index = info["i"]
333323
juggled = info["juggled"]
334324

335-
mins, maxs, centers, deltas, tc, highs = self._get_coord_info(renderer)
325+
mins, maxs, tc, highs = self._get_coord_info()
326+
centers = 0.5 * (maxs + mins)
327+
deltas = (maxs - mins) / 12 # label offsets
336328

337329
minmax = np.where(highs, maxs, mins)
338330
maxmin = np.where(~highs, maxs, mins)

0 commit comments

Comments
 (0)
0