From 0c0c3d6fce7d48de020ef0d50aa8dc0039f4a559 Mon Sep 17 00:00:00 2001 From: Naoya Kanai Date: Sat, 21 Jan 2017 00:33:54 -0800 Subject: [PATCH] twinx and twiny inherit autoscale setting for shared axis from parent Axes --- lib/matplotlib/axes/_base.py | 30 ++++++++------- .../test_axes/twin_autoscale.png | Bin 0 -> 15561 bytes lib/matplotlib/tests/test_axes.py | 36 ++++++++++++++++++ 3 files changed, 52 insertions(+), 14 deletions(-) create mode 100644 lib/matplotlib/tests/baseline_images/test_axes/twin_autoscale.png diff --git a/lib/matplotlib/axes/_base.py b/lib/matplotlib/axes/_base.py index 94b3f3b255b8..0ea95aed250a 100644 --- a/lib/matplotlib/axes/_base.py +++ b/lib/matplotlib/axes/_base.py @@ -3904,16 +3904,16 @@ def twinx(self): """ Create a twin Axes sharing the xaxis - Create a twin of Axes for generating a plot with a shared - x-axis but independent y-axis. The y-axis of self will have - ticks on left and the returned axes will have ticks on the - right. To ensure tick marks of both axis align, see + Create a new Axes instance with an invisible x-axis and an independent + y-axis positioned opposite to the original one (i.e. at right). The + x-axis autoscale setting will be inherited from the original Axes. + To ensure that the tick marks of both y-axes align, see `~matplotlib.ticker.LinearLocator` Returns ------- - Axis - The newly created axis + ax_twin : Axes + The newly created Axes instance Notes ----- @@ -3924,6 +3924,7 @@ def twinx(self): ax2.yaxis.tick_right() ax2.yaxis.set_label_position('right') ax2.yaxis.set_offset_position('right') + ax2.set_autoscalex_on(self.get_autoscalex_on()) self.yaxis.tick_left() ax2.xaxis.set_visible(False) ax2.patch.set_visible(False) @@ -3933,25 +3934,26 @@ def twiny(self): """ Create a twin Axes sharing the yaxis - Create a twin of Axes for generating a plot with a shared - y-axis but independent x-axis. The x-axis of self will have - ticks on bottom and the returned axes will have ticks on the - top. + Create a new Axes instance with an invisible y-axis and an independent + x-axis positioned opposite to the original one (i.e. at top). The + y-axis autoscale setting will be inherited from the original Axes. + To ensure that the tick marks of both x-axes align, see + `~matplotlib.ticker.LinearLocator` Returns ------- - Axis - The newly created axis + ax_twin : Axes + The newly created Axes instance Notes - ------ + ----- For those who are 'picking' artists while using twiny, pick events are only called for the artists in the top-most axes. """ - ax2 = self._make_twin_axes(sharey=self) ax2.xaxis.tick_top() ax2.xaxis.set_label_position('top') + ax2.set_autoscaley_on(self.get_autoscaley_on()) self.xaxis.tick_bottom() ax2.yaxis.set_visible(False) ax2.patch.set_visible(False) diff --git a/lib/matplotlib/tests/baseline_images/test_axes/twin_autoscale.png b/lib/matplotlib/tests/baseline_images/test_axes/twin_autoscale.png new file mode 100644 index 0000000000000000000000000000000000000000..922eeff5c43decb3fab943dd07f58df6313d826e GIT binary patch literal 15561 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%0DK=)Q;OWLL^`aVlwN(OyW7$UxzAYaHlyClxCx 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 pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy