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

Skip to content

Commit 9b057ea

Browse files
Commonize axis scale setting code
1 parent 9821771 commit 9b057ea

1 file changed

Lines changed: 33 additions & 27 deletions

File tree

lib/mpl_toolkits/mplot3d/axes3d.py

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1111,6 +1111,33 @@ def get_zlim(self):
11111111
get_zscale = _axis_method_wrapper("zaxis", "get_scale")
11121112

11131113
# Custom scale setters that handle limit validation for non-linear scales
1114+
def _set_axis_scale(self, axis, get_lim, set_lim, value, **kwargs):
1115+
"""
1116+
Set scale for an axis and constrain limits to valid range.
1117+
1118+
Parameters
1119+
----------
1120+
axis : Axis
1121+
The axis to set the scale on.
1122+
get_lim : callable
1123+
Function to get current axis limits.
1124+
set_lim : callable
1125+
Function to set axis limits.
1126+
value : str
1127+
The scale name.
1128+
**kwargs
1129+
Forwarded to scale constructor.
1130+
"""
1131+
axis._set_axes_scale(value, **kwargs)
1132+
# After setting scale, constrain limits using scale's limit_range_for_scale
1133+
if hasattr(axis, '_scale') and axis._scale is not None:
1134+
vmin, vmax = get_lim()
1135+
minpos = getattr(axis, '_minpos', 1e-300)
1136+
new_vmin, new_vmax = axis._scale.limit_range_for_scale(
1137+
vmin, vmax, minpos)
1138+
if (new_vmin, new_vmax) != (vmin, vmax):
1139+
set_lim(new_vmin, new_vmax, auto=True)
1140+
11141141
def set_xscale(self, value, **kwargs):
11151142
"""
11161143
Set the x-axis scale.
@@ -1125,15 +1152,8 @@ def set_xscale(self, value, **kwargs):
11251152
Keyword arguments are forwarded to the scale class.
11261153
For example, ``base=2`` can be passed when using a log scale.
11271154
"""
1128-
self.xaxis._set_axes_scale(value, **kwargs)
1129-
# After setting scale, constrain limits using scale's limit_range_for_scale
1130-
if hasattr(self.xaxis, '_scale') and self.xaxis._scale is not None:
1131-
vmin, vmax = self.get_xlim()
1132-
minpos = getattr(self.xaxis, '_minpos', 1e-300)
1133-
new_vmin, new_vmax = self.xaxis._scale.limit_range_for_scale(
1134-
vmin, vmax, minpos)
1135-
if (new_vmin, new_vmax) != (vmin, vmax):
1136-
self.set_xlim(new_vmin, new_vmax, auto=True)
1155+
self._set_axis_scale(self.xaxis, self.get_xlim, self.set_xlim,
1156+
value, **kwargs)
11371157

11381158
def set_yscale(self, value, **kwargs):
11391159
"""
@@ -1149,15 +1169,8 @@ def set_yscale(self, value, **kwargs):
11491169
Keyword arguments are forwarded to the scale class.
11501170
For example, ``base=2`` can be passed when using a log scale.
11511171
"""
1152-
self.yaxis._set_axes_scale(value, **kwargs)
1153-
# After setting scale, constrain limits using scale's limit_range_for_scale
1154-
if hasattr(self.yaxis, '_scale') and self.yaxis._scale is not None:
1155-
vmin, vmax = self.get_ylim()
1156-
minpos = getattr(self.yaxis, '_minpos', 1e-300)
1157-
new_vmin, new_vmax = self.yaxis._scale.limit_range_for_scale(
1158-
vmin, vmax, minpos)
1159-
if (new_vmin, new_vmax) != (vmin, vmax):
1160-
self.set_ylim(new_vmin, new_vmax, auto=True)
1172+
self._set_axis_scale(self.yaxis, self.get_ylim, self.set_ylim,
1173+
value, **kwargs)
11611174

11621175
def set_zscale(self, value, **kwargs):
11631176
"""
@@ -1173,15 +1186,8 @@ def set_zscale(self, value, **kwargs):
11731186
Keyword arguments are forwarded to the scale class.
11741187
For example, ``base=2`` can be passed when using a log scale.
11751188
"""
1176-
self.zaxis._set_axes_scale(value, **kwargs)
1177-
# After setting scale, constrain limits using scale's limit_range_for_scale
1178-
if hasattr(self.zaxis, '_scale') and self.zaxis._scale is not None:
1179-
vmin, vmax = self.get_zlim()
1180-
minpos = getattr(self.zaxis, '_minpos', 1e-300)
1181-
new_vmin, new_vmax = self.zaxis._scale.limit_range_for_scale(
1182-
vmin, vmax, minpos)
1183-
if (new_vmin, new_vmax) != (vmin, vmax):
1184-
self.set_zlim(new_vmin, new_vmax, auto=True)
1189+
self._set_axis_scale(self.zaxis, self.get_zlim, self.set_zlim,
1190+
value, **kwargs)
11851191

11861192
get_zticks = _axis_method_wrapper("zaxis", "get_ticklocs")
11871193
set_zticks = _axis_method_wrapper("zaxis", "set_ticks")

0 commit comments

Comments
 (0)