From b4563d842b53d668f9382c9c015e393c77934619 Mon Sep 17 00:00:00 2001 From: Thomas A Caswell Date: Sat, 11 Oct 2014 00:11:28 -0400 Subject: [PATCH] BUG : fix cla behavior with twinx Closes #3633 Added more special-case logic for twined axes. --- lib/matplotlib/axes/_base.py | 17 +++++++++++++++++ lib/matplotlib/tests/test_axes.py | 26 +++++++++++++++++++++++++- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/axes/_base.py b/lib/matplotlib/axes/_base.py index 9d93e22e0641..532e72275449 100644 --- a/lib/matplotlib/axes/_base.py +++ b/lib/matplotlib/axes/_base.py @@ -816,6 +816,16 @@ def _gen_axes_spines(self, locations=None, offset=0.0, units='inches'): def cla(self): """Clear the current axes.""" # Note: this is called by Axes.__init__() + + # stash the current visibility state + if hasattr(self, 'patch'): + patch_visible = self.patch.get_visible() + else: + patch_visible = True + + xaxis_visible = self.xaxis.get_visible() + yaxis_visible = self.yaxis.get_visible() + self.xaxis.cla() self.yaxis.cla() for name, spine in six.iteritems(self.spines): @@ -941,6 +951,13 @@ def cla(self): self._shared_x_axes.clean() self._shared_y_axes.clean() + if self._sharex: + self.xaxis.set_visible(xaxis_visible) + self.patch.set_visible(patch_visible) + + if self._sharey: + self.yaxis.set_visible(yaxis_visible) + self.patch.set_visible(patch_visible) def clear(self): """clear the axes""" diff --git a/lib/matplotlib/tests/test_axes.py b/lib/matplotlib/tests/test_axes.py index ffae68baa8aa..a87b48181bf6 100644 --- a/lib/matplotlib/tests/test_axes.py +++ b/lib/matplotlib/tests/test_axes.py @@ -4,7 +4,7 @@ import six from six.moves import xrange -from nose.tools import assert_equal, assert_raises +from nose.tools import assert_equal, assert_raises, assert_false, assert_true import datetime import numpy as np @@ -100,6 +100,30 @@ def test_twin_axis_locaters_formatters(): ax3 = ax1.twinx() +@cleanup +def test_twinx_cla(): + fig, ax = plt.subplots() + ax2 = ax.twinx() + ax3 = ax2.twiny() + plt.draw() + assert_false(ax2.xaxis.get_visible()) + assert_false(ax2.patch.get_visible()) + ax2.cla() + ax3.cla() + + assert_false(ax2.xaxis.get_visible()) + assert_false(ax2.patch.get_visible()) + assert_true(ax2.yaxis.get_visible()) + + assert_true(ax3.xaxis.get_visible()) + assert_false(ax3.patch.get_visible()) + assert_false(ax3.yaxis.get_visible()) + + assert_true(ax.xaxis.get_visible()) + assert_true(ax.patch.get_visible()) + assert_true(ax.yaxis.get_visible()) + + @image_comparison(baseline_images=["autoscale_tiny_range"], remove_text=True) def test_autoscale_tiny_range(): # github pull #904