8000 Merge pull request #28577 from QuLogic/fix-tickdir · matplotlib/matplotlib@3d37d7a · GitHub
[go: up one dir, main page]

Skip to content

Commit 3d37d7a

Browse files
authored
Merge pull request #28577 from QuLogic/fix-tickdir
Copy all internals from initial Tick to lazy ones
2 parents bc44f3e + 9b8c80c commit 3d37d7a

File tree

2 files changed

+43
-12
lines changed

2 files changed

+43
-12
lines changed

lib/matplotlib/axis.py

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,6 @@
3333
_gridline_param_names = ['grid_' + name
3434
for name in _line_param_names + _line_param_aliases]
3535

36-
_MARKER_DICT = {
37-
'out': (mlines.TICKDOWN, mlines.TICKUP),
38-
'in': (mlines.TICKUP, mlines.TICKDOWN),
39-
'inout': ('|', '|'),
40-
}
41-
4236

4337
class Tick(martist.Artist):
4438
"""
@@ -204,18 +198,21 @@ def _set_labelrotation(self, labelrotation):
204198
_api.check_in_list(['auto', 'default'], labelrotation=mode)
205199
self._labelrotation = (mode, angle)
206200

201+
@property
202+
def _pad(self):
203+
return self._base_pad + self.get_tick_padding()
204+
207205
def _apply_tickdir(self, tickdir):
208206
"""Set tick direction. Valid values are 'out', 'in', 'inout'."""
209-
# This method is responsible for updating `_pad`, and, in subclasses,
210-
# for setting the tick{1,2}line markers as well. From the user
211-
# perspective this should always be called through _apply_params, which
212-
# further updates ticklabel positions using the new pads.
207+
# This method is responsible for verifying input and, in subclasses, for setting
208+
# the tick{1,2}line markers. From the user perspective this should always be
209+
# called through _apply_params, which further updates ticklabel positions using
210+
# the new pads.
213211
if tickdir is None:
214212
tickdir = mpl.rcParams[f'{self.__name__}.direction']
215213
else:
216214
_api.check_in_list(['in', 'out', 'inout'], tickdir=tickdir)
217215
self._tickdir = tickdir
218-
self._pad = self._base_pad + self.get_tick_padding()
219216

220217
def get_tickdir(self):
221218
return self._tickdir
@@ -425,7 +422,11 @@ def _get_text2_transform(self):
425422
def _apply_tickdir(self, tickdir):
426423
# docstring inherited
427424
super()._apply_tickdir(tickdir)
428-
mark1, mark2 = _MARKER_DICT[self._tickdir]
425+
mark1, mark2 = {
426+
'out': (mlines.TICKDOWN, mlines.TICKUP),
427+
'in': (mlines.TICKUP, mlines.TICKDOWN),
428+
'inout': ('|', '|'),
429+
}[self._tickdir]
429430
self.tick1line.set_marker(mark1)
430431
self.tick2line.set_marker(mark2)
431432

@@ -1617,6 +1618,14 @@ def _copy_tick_props(self, src, dest):
16171618
dest.tick1line.update_from(src.tick1line)
16181619
dest.tick2line.update_from(src.tick2line)
16191620
dest.gridline.update_from(src.gridline)
1621+
dest.update_from(src)
1622+
dest._loc = src._loc
1623+
dest._size = src._size
1624+
dest._width = src._width
1625+
dest._base_pad = src._base_pad
1626+
dest._labelrotation = src._labelrotation
1627+
dest._zorder = src._zorder
1628+
dest._tickdir = src._tickdir
16201629

16211630
def get_label_text(self):
16221631
"""Get the text of the label."""

lib/matplotlib/tests/test_axes.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5741,6 +5741,28 @@ def test_reset_ticks(fig_test, fig_ref):
57415741
ax.yaxis.reset_ticks()
57425742

57435743

5744+
@mpl.style.context('mpl20')
5745+
def test_context_ticks():
5746+
with plt.rc_context({
5747+
'xtick.direction': 'in', 'xtick.major.size': 30, 'xtick.major.width': 5,
5748+
'xtick.color': 'C0', 'xtick.major.pad': 12,
5749+
'xtick.bottom': True, 'xtick.top': True,
5750+
'xtick.labelsize': 14, 'xtick.labelcolor': 'C1'}):
5751+
fig, ax = plt.subplots()
5752+
# Draw outside the context so that all-but-first tick are generated with the normal
5753+
# mpl20 style in place.
5754+
fig.draw_without_rendering()
5755+
5756+
first_tick = ax.xaxis.majorTicks[0]
5757+
for tick in ax.xaxis.majorTicks[1:]:
5758+
assert tick._size == first_tick._size
5759+
assert tick._width == first_tick._width
5760+
assert tick._base_pad == first_tick._base_pad
5761+
assert tick._labelrotation == first_tick._labelrotation
5762+
assert tick._zorder == first_tick._zorder
5763+
assert tick._tickdir == first_tick._tickdir
5764+
5765+
57445766
def test_vline_limit():
57455767
fig = plt.figure()
57465768
ax = fig.gca()

0 commit comments

Comments
 (0)
0