@@ -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