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

Skip to content

Commit ff2ca03

Browse files
committed
Redupe parameters dealiasing for clarity.
The "canonical" property names for Axes3D were switched from xlim3d/ylim3d to xlim/ylim so that Axes3D can directly inherit the setters from 2D Axes.
1 parent ffc63a0 commit ff2ca03

File tree

3 files changed

+66
-75
lines changed

3 files changed

+66
-75
lines changed

lib/matplotlib/axes/_base.py

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3691,9 +3691,17 @@ def set_xlim(self, left=None, right=None, emit=True, auto=False,
36913691
36923692
>>> set_xlim(5000, 0)
36933693
"""
3694-
return self.xaxis._set_lim(
3695-
left, right, xmin, xmax, emit=emit, auto=auto,
3696-
names=("left", "right"))
3694+
if right is None and np.iterable(left):
3695+
left, right = left
3696+
if xmin is not None:
3697+
if left is not None:
3698+
raise TypeError("Cannot pass both 'left' and 'xmin'")
3699+
left = xmin
3700+
if xmax is not None:
3701+
if right is not None:
3702+
raise TypeError("Cannot pass both 'right' and 'xmax'")
3703+
right = xmax
3704+
return self.xaxis._set_lim(left, right, emit=emit, auto=auto)
36973705

36983706
get_xscale = _axis_method_wrapper("xaxis", "get_scale")
36993707

@@ -3955,9 +3963,17 @@ def set_ylim(self, bottom=None, top=None, emit=True, auto=False,
39553963
39563964
>>> set_ylim(5000, 0)
39573965
"""
3958-
return self.yaxis._set_lim(
3959-
bottom, top, ymin, ymax, emit=emit, auto=auto,
3960-
names=("bottom", "top"))
3966+
if top is None and np.iterable(bottom):
3967+
bottom, top = bottom
3968+
if ymin is not None:
3969+
if bottom is not None:
3970+
raise TypeError("Cannot pass both 'bottom' and 'ymin'")
3971+
bottom = ymin
3972+
if ymax is not None:
3973+
if top is not None:
3974+
raise TypeError("Cannot pass both 'top' and 'ymax'")
3975+
top = ymax
3976+
return self.yaxis._set_lim(bottom, top, emit=emit, auto=auto)
39613977

39623978
get_yscale = _axis_method_wrapper("yaxis", "get_scale")
39633979

lib/matplotlib/axis.py

Lines changed: 19 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1023,40 +1023,27 @@ def set_default_intervals(self):
10231023
# attribute, and the derived code below will check for that
10241024
# and use it if it's available (else just use 0..1)
10251025

1026-
def _set_lim(self, v0, v1, alt0=None, alt1=None, *,
1027-
emit=True, auto, names=("", "")):
1026+
def _set_lim(self, v0, v1, *, emit=True, auto):
10281027
"""
10291028
Set view limits.
10301029
10311030
This method is a helper for the Axes ``set_xlim``, ``set_ylim``, and
1032-
``set_zlim`` methods. This docstring uses names corresponding to
1033-
``set_xlim`` for simplicity.
1031+
``set_zlim`` methods.
10341032
1035-
*names* is the pair of the names of the first two parameters of the
1036-
Axes method (e.g., "left" and "right"). They are only used to generate
1037-
error messages; and can be empty if the limits are known to be valid.
1038-
1039-
Other parameters are directly forwarded from the Axes limits setter:
1040-
*v0*, *v1*, *alt0*, and *alt1* map to *left*, *right*, *xmin*, and
1041-
*xmax* respectively; *emit* and *auto* are used as is.
1033+
Parameters
1034+
----------
1035+
v0, v1 : float
1036+
The view limits. (Passing *v0* as a (low, high) pair is not
1037+
supported; normalization must occur in the Axes setters.)
1038+
emit : bool, default: True
1039+
Whether to notify observers of limit change.
1040+
auto : bool or None, default: False
1041+
Whether to turn on autoscaling of the x-axis. True turns on, False
1042+
turns off, None leaves unchanged.
10421043
"""
1043-
v0name, v1name = names # The value names.
10441044
name, = [name for name, axis in self.axes._get_axis_map().items()
10451045
if axis is self] # The axis name.
10461046

1047-
if v1 is None and np.iterable(v0):
1048-
v0, v1 = v0
1049-
if alt0 is not None:
1050-
if v0 is not None:
1051-
raise TypeError(
1052-
f"Cannot pass both {v0name!r} and '{name}lim'")
1053-
v0 = alt0
1054-
if alt1 is not None:
1055-
if v1 is not None:
1056-
raise TypeError(
1057-
f"Cannot pass both {v1name!r} and '{name}lim'")
1058-
v1 = alt1
1059-
10601047
self.axes._process_unit_info([(name, (v0, v1))], convert=False)
10611048
v0 = self.axes._validate_converted_limits(v0, self.convert_units)
10621049
v1 = self.axes._validate_converted_limits(v1, self.convert_units)
@@ -1075,23 +1062,20 @@ def _set_lim(self, v0, v1, alt0=None, alt1=None, *,
10751062
# so only grab the limits if we really need them.
10761063
old0, old1 = self.get_view_interval()
10771064
if v0 <= 0:
1078-
_api.warn_external(
1079-
f"Attempt to set non-positive {v0name} {name}lim on a "
1080-
f"log-scaled axis will be ignored.")
1065+
_api.warn_external(f"Attempt to set non-positive {name}lim on "
1066+
f"a log-scaled axis will be ignored.")
10811067
v0 = old0
10821068
if v1 <= 0:
1083-
_api.warn_external(
1084-
f"Attempt to set non-positive {v1name} {name}lim on a "
1085-
f"log-scaled axis will be ignored.")
1069+
_api.warn_external(f"Attempt to set non-positive {name}lim on "
1070+
f"a log-scaled axis will be ignored.")
10861071
v1 = old1
10871072
if v0 == v1:
10881073
_api.warn_external(
1089-
f"Attempting to set identical {v0name} == {v1name} == {v0} "
1074+
f"Attempting to set identical low and high {name}lims "
10901075
f"makes transformation singular; automatically expanding.")
1091-
reverse = v0 > v1
1076+
reverse = bool(v0 > v1) # explicit cast needed for python3.8+np.bool_.
10921077
v0, v1 = self.get_major_locator().nonsingular(v0, v1)
10931078
v0, v1 = self.limit_range_for_scale(v0, v1)
1094-
# cast to bool to avoid bad interaction between python 3.8 and np.bool_
10951079
v0, v1 = sorted([v0, v1], reverse=bool(reverse))
10961080

10971081
self.set_view_interval(v0, v1, ignore=True)
@@ -1107,7 +1091,7 @@ def _set_lim(self, v0, v1, alt0=None, alt1=None, *,
11071091
for other in self.axes._shared_axes[name].get_siblings(self.axes):
11081092
if other is not self.axes:
11091093
other._get_axis_map()[name]._set_lim(
1110-
v0, v1, emit=False, auto=auto, names=names)
1094+
v0, v1, emit=False, auto=auto)
11111095
if other.figure != self.figure:
11121096
other.figure.canvas.draw_idle()
11131097

lib/mpl_toolkits/mplot3d/axes3d.py

Lines changed: 25 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242

4343
@docstring.interpd
4444
@cbook._define_aliases({
45-
"xlim3d": ["xlim"], "ylim3d": ["ylim"], "zlim3d": ["zlim"]})
45+
"xlim": ["xlim3d"], "ylim": ["ylim3d"], "zlim": ["zlim3d"]})
4646
class Axes3D(Axes):
4747
"""
4848
3D Axes object.
@@ -659,48 +659,39 @@ def get_w_lims(self):
659659
minz, maxz = self.get_zlim3d()
660660
return minx, maxx, miny, maxy, minz, maxz
661661

662-
def set_xlim3d(self, left=None, right=None, emit=True, auto=False,
663-
*, xmin=None, xmax=None):
664-
"""
665-
Set 3D x limits.
666-
667-
See `.Axes.set_xlim` for full documentation.
668-
"""
669-
return self.xaxis._set_lim(
670-
left, right, xmin, xmax, emit=emit, auto=auto,
671-
names=("left", "right"))
672-
673-
def set_ylim3d(self, bottom=None, top=None, emit=True, auto=False,
674-
*, ymin=None, ymax=None):
675-
"""
676-
Set 3D y limits.
677-
678-
See `.Axes.set_ylim` for full documentation.
679-
"""
680-
return self.yaxis._set_lim(
681-
bottom, top, ymin, ymax, emit=emit, auto=auto,
682-
names=("bottom", "top"))
683-
684-
def set_zlim3d(self, bottom=None, top=None, emit=True, auto=False,
685-
*, zmin=None, zmax=None):
662+
# set_xlim, set_ylim are directly inherited from base Axes.
663+
def set_zlim(self, bottom=None, top=None, emit=True, auto=False,
664+
*, zmin=None, zmax=None):
686665
"""
687666
Set 3D z limits.
688667
689668
See `.Axes.set_ylim` for full documentation
690669
"""
691-
return self.zaxis._set_lim(
692-
bottom, top, zmin, zmax, emit=emit, auto=auto,
693-
names=("bottom", "top"))
694-
695-
def get_xlim3d(self):
670+
if top is None and np.iterable(bottom):
671+
bottom, top = bottom
672+
if zmin is not None:
673+
if bottom is not None:
674+
raise TypeError("Cannot pass both 'bottom' and 'zmin'")
675+
bottom = zmin
676+
if zmax is not None:
677+
if top is not None:
678+
raise TypeError("Cannot pass both 'top' and 'zmax'")
679+
top = zmax
680+
return self.zaxis._set_lim(bottom, top, emit=emit, auto=auto)
681+
682+
set_xlim3d = maxes.Axes.set_xlim
683+
set_ylim3d = maxes.Axes.set_ylim
684+
set_zlim3d = set_zlim
685+
686+
def get_xlim(self):
687+
# docstring inherited
696688
return tuple(self.xy_viewLim.intervalx)
697-
get_xlim3d.__doc__ = maxes.Axes.get_xlim.__doc__
698689

699-
def get_ylim3d(self):
690+
def get_ylim(self):
691+
# docstring inherited
700692
return tuple(self.xy_viewLim.intervaly)
701-
get_ylim3d.__doc__ = maxes.Axes.get_ylim.__doc__
702693

703-
def get_zlim3d(self):
694+
def get_zlim(self):
704695
"""Get 3D z limits."""
705696
return tuple(self.zz_viewLim.intervalx)
706697

0 commit comments

Comments
 (0)