From 80e672e0700fa8a268aed1bdefedbd0e493e91a7 Mon Sep 17 00:00:00 2001 From: Ruth Comer Date: Sat, 5 Mar 2022 19:34:47 +0000 Subject: [PATCH] enable Axes subclass creation by Axes.inset_axes --- .../inset_axes_improvements.rst | 6 ++++ lib/matplotlib/axes/_axes.py | 21 ++++++++++-- .../baseline_images/test_axes/inset_polar.png | Bin 0 -> 37358 bytes lib/matplotlib/tests/test_axes.py | 30 ++++++++++++++++-- 4 files changed, 53 insertions(+), 4 deletions(-) create mode 100644 doc/users/next_whats_new/inset_axes_improvements.rst create mode 100644 lib/matplotlib/tests/baseline_images/test_axes/inset_polar.png diff --git a/doc/users/next_whats_new/inset_axes_improvements.rst b/doc/users/next_whats_new/inset_axes_improvements.rst new file mode 100644 index 000000000000..8ff7d82cfb28 --- /dev/null +++ b/doc/users/next_whats_new/inset_axes_improvements.rst @@ -0,0 +1,6 @@ +Axes.inset_axes Flexibility +--------------------------- + +`matplotlib.axes.Axes.inset_axes` now accepts the *projection*, *polar* and +*axes_class* keyword arguments, so that subclasses of `matplotlib.axes.Axes` may +be returned. \ No newline at end of file diff --git a/lib/matplotlib/axes/_axes.py b/lib/matplotlib/axes/_axes.py index 3026e681f742..5399b14374ce 100644 --- a/lib/matplotlib/axes/_axes.py +++ b/lib/matplotlib/axes/_axes.py @@ -326,13 +326,27 @@ def inset_axes(self, bounds, *, transform=None, zorder=5, **kwargs): Defaults to `ax.transAxes`, i.e. the units of *rect* are in Axes-relative coordinates. + projection : {None, 'aitoff', 'hammer', 'lambert', 'mollweide', \ +'polar', 'rectilinear', str}, optional + The projection type of the inset `~.axes.Axes`. *str* is the name + of a custom projection, see `~matplotlib.projections`. The default + None results in a 'rectilinear' projection. + + polar : bool, default: False + If True, equivalent to projection='polar'. + + axes_class : subclass type of `~.axes.Axes`, optional + The `.axes.Axes` subclass that is instantiated. This parameter + is incompatible with *projection* and *polar*. See + :ref:`axisartist_users-guide-index` for examples. + zorder : number Defaults to 5 (same as `.Axes.legend`). Adjust higher or lower to change whether it is above or below data plotted on the parent Axes. **kwargs - Other keyword arguments are passed on to the child `.Axes`. + Other keyword arguments are passed on to the inset Axes class. Returns ------- @@ -358,7 +372,10 @@ def inset_axes(self, bounds, *, transform=None, zorder=5, **kwargs): # This puts the rectangle into figure-relative coordinates. inset_locator = _TransformedBoundsLocator(bounds, transform) bounds = inset_locator(self, None).bounds - inset_ax = Axes(self.figure, bounds, zorder=zorder, **kwargs) + projection_class, pkw = self.figure._process_projection_requirements( + bounds, **kwargs) + inset_ax = projection_class(self.figure, bounds, zorder=zorder, **pkw) + # this locator lets the axes move if in data coordinates. # it gets called in `ax.apply_aspect() (of all places) inset_ax.set_axes_locator(inset_locator) diff --git a/lib/matplotlib/tests/baseline_images/test_axes/inset_polar.png b/lib/matplotlib/tests/baseline_images/test_axes/inset_polar.png new file mode 100644 index 0000000000000000000000000000000000000000..b7b7faf198ec9d73d02d19cbd07a17b9fde574a6 GIT binary patch literal 37358 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 literal 0 HcmV?d00001 diff --git a/lib/matplotlib/tests/test_axes.py b/lib/matplotlib/tests/test_axes.py index b2bc70ff6143..358b911c45fa 100644 --- a/lib/matplotlib/tests/test_axes.py +++ b/lib/matplotlib/tests/test_axes.py @@ -26,10 +26,13 @@ import matplotlib.markers as mmarkers import matplotlib.patches as mpatches import matplotlib.path as mpath +from matplotlib.projections.geo import HammerAxes +from matplotlib.projections.polar import PolarAxes import matplotlib.pyplot as plt import matplotlib.text as mtext import matplotlib.ticker as mticker import matplotlib.transforms as mtransforms +import mpl_toolkits.axisartist as AA from numpy.testing import ( assert_allclose, assert_array_equal, assert_array_almost_equal) from matplotlib.testing.decorators import ( @@ -2543,8 +2546,6 @@ def get_next_color(): def test_as_mpl_axes_api(): # tests the _as_mpl_axes api - from matplotlib.projections.polar import PolarAxes - class Polar: def __init__(self): self.theta_offset = 0 @@ -6614,6 +6615,31 @@ def test_zoom_inset(): axin1.get_position().get_points(), xx, rtol=1e-4) +@image_comparison(['inset_polar.png'], remove_text=True, style='mpl20') +def test_inset_polar(): + _, ax = plt.subplots() + axins = ax.inset_axes([0.5, 0.1, 0.45, 0.45], polar=True) + assert isinstance(axins, PolarAxes) + + r = np.arange(0, 2, 0.01) + theta = 2 * np.pi * r + + ax.plot(theta, r) + axins.plot(theta, r) + + +def test_inset_projection(): + _, ax = plt.subplots() + axins = ax.inset_axes([0.2, 0.2, 0.3, 0.3], projection="hammer") + assert isinstance(axins, HammerAxes) + + +def test_inset_subclass(): + _, ax = plt.subplots() + axins = ax.inset_axes([0.2, 0.2, 0.3, 0.3], axes_class=AA.Axes) + assert isinstance(axins, AA.Axes) + + @pytest.mark.parametrize('x_inverted', [False, True]) @pytest.mark.parametrize('y_inverted', [False, True]) def test_indicate_inset_inverted(x_inverted, y_inverted):