From 27fd53ac36279ed49b20532893cbb091b1887035 Mon Sep 17 00:00:00 2001 From: "Adrien F. Vincent" <vincent.adrien@gmail.com> Date: Mon, 16 Oct 2017 18:54:09 -0700 Subject: [PATCH] always update tick labels (and add a test) --- lib/matplotlib/axis.py | 5 +++-- lib/matplotlib/tests/test_axes.py | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/lib/matplotlib/axis.py b/lib/matplotlib/axis.py index 6cc38bb9066e..3c00d5e7176a 100644 --- a/lib/matplotlib/axis.py +++ b/lib/matplotlib/axis.py @@ -1052,11 +1052,12 @@ def _update_ticks(self, renderer): for tick, loc, label in tick_tups: if tick is None: continue - if not mtransforms.interval_contains(interval_expanded, loc): - continue + # NB: always update labels and position to avoid issues like #9397 tick.update_position(loc) tick.set_label1(label) tick.set_label2(label) + if not mtransforms.interval_contains(interval_expanded, loc): + continue ticks_to_draw.append(tick) return ticks_to_draw diff --git a/lib/matplotlib/tests/test_axes.py b/lib/matplotlib/tests/test_axes.py index 6a2ec213329e..70a7d5ed3891 100644 --- a/lib/matplotlib/tests/test_axes.py +++ b/lib/matplotlib/tests/test_axes.py @@ -4570,6 +4570,25 @@ def test_set_get_ticklabels(): ax[1].set_yticklabels(ax[0].get_yticklabels()) +def test_tick_label_update(): + # test issue 9397 + + fig, ax = plt.subplots() + + # Set up a dummy formatter + def formatter_func(x, pos): + return "unit value" if x == 1 else "" + ax.xaxis.set_major_formatter(plt.FuncFormatter(formatter_func)) + + # Force some of the x-axis ticks to be outside of the drawn range + ax.set_xticks([-1, 0, 1, 2, 3]) + ax.set_xlim(-0.5, 2.5) + + ax.figure.canvas.draw() + tick_texts = [tick.get_text() for tick in ax.xaxis.get_ticklabels()] + assert tick_texts == ["", "", "unit value", "", ""] + + @image_comparison(baseline_images=['o_marker_path_snap'], extensions=['png'], savefig_kwarg={'dpi': 72}) def test_o_marker_path_snap():