From 9156ac1ec4ce01acb8efde9069bb495d2ed7253b Mon Sep 17 00:00:00 2001 From: Ebubekir Date: Wed, 7 May 2025 16:48:57 +0930 Subject: [PATCH] Implementing Feature for Issue 13930 --- lib/matplotlib/mpl-data/matplotlibrc | 5 +++++ lib/matplotlib/mpl-data/stylelib/classic.mplstyle | 5 +++++ lib/matplotlib/rcsetup.py | 5 +++++ lib/matplotlib/spines.py | 8 ++++++-- 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/lib/matplotlib/mpl-data/matplotlibrc b/lib/matplotlib/mpl-data/matplotlibrc index 72117abf7317..eda5679116bc 100644 --- a/lib/matplotlib/mpl-data/matplotlibrc +++ b/lib/matplotlib/mpl-data/matplotlibrc @@ -420,6 +420,11 @@ #axes.spines.top: True #axes.spines.right: True +#axes.spines.left.position: outward, 0.0 # set (outward, axes, data) position +#axes.spines.bottom.position: outward, 0.0 +#axes.spines.top.position: outward, 0.0 +#axes.spines.right.position: outward, 0.0 + #axes.unicode_minus: True # use Unicode for the minus symbol rather than hyphen. See # https://en.wikipedia.org/wiki/Plus_and_minus_signs#Character_codes #axes.prop_cycle: cycler(color='tab10') diff --git a/lib/matplotlib/mpl-data/stylelib/classic.mplstyle b/lib/matplotlib/mpl-data/stylelib/classic.mplstyle index 6cba66076ac7..f85905e90041 100644 --- a/lib/matplotlib/mpl-data/stylelib/classic.mplstyle +++ b/lib/matplotlib/mpl-data/stylelib/classic.mplstyle @@ -215,6 +215,11 @@ axes.prop_cycle : cycler('color', 'bgrcmyk') # as list of string colorspecs: # single letter, long name, or # web-style hex +axes.spines.bottom.position: outward, 0.0 +axes.spines.left.position: outward, 0.0 +axes.spines.right.position: outward, 0.0 +axes.spines.top.position: outward, 0.0 + axes.autolimit_mode : round_numbers axes.xmargin : 0 # x margin. See `axes.Axes.margins` axes.ymargin : 0 # y margin See `axes.Axes.margins` diff --git a/lib/matplotlib/rcsetup.py b/lib/matplotlib/rcsetup.py index ce29c5076100..b183cc12d176 100644 --- a/lib/matplotlib/rcsetup.py +++ b/lib/matplotlib/rcsetup.py @@ -1108,6 +1108,11 @@ def _convert_validator_spec(key, conv): "axes.spines.bottom": validate_bool, # denoting data boundary. "axes.spines.top": validate_bool, + "axes.spines.left.position": validate_anylist, + "axes.spines.right.position": validate_anylist, + "axes.spines.bottom.position": validate_anylist, + "axes.spines.top.position": validate_anylist, + "axes.titlesize": validate_fontsize, # Axes title fontsize "axes.titlelocation": ["left", "center", "right"], # Axes title alignment "axes.titleweight": validate_fontweight, # Axes title font weight diff --git a/lib/matplotlib/spines.py b/lib/matplotlib/spines.py index 7e77a393f2a2..d9bdb8f98aed 100644 --- a/lib/matplotlib/spines.py +++ b/lib/matplotlib/spines.py @@ -202,8 +202,12 @@ def get_path(self): def _ensure_position_is_set(self): if self._position is None: - # default position - self._position = ('outward', 0.0) # in points + # default position in points + default_pos = mpl.rcParams[f'axes.spines.{self.spine_type}.position'] + if len(default_pos) == 1: + self._position = default_pos[0] + else: + self._position = [default_pos[0], float(default_pos[1])] self.set_position(self._position) def register_axis(self, axis):