From eee91122d956c258b74f76559f72b1514f30d52c Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Fri, 24 Mar 2017 01:10:29 -0400 Subject: [PATCH 1/6] Remove old ChangeLog from axes_grid. --- lib/mpl_toolkits/axes_grid/ChangeLog | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 lib/mpl_toolkits/axes_grid/ChangeLog diff --git a/lib/mpl_toolkits/axes_grid/ChangeLog b/lib/mpl_toolkits/axes_grid/ChangeLog deleted file mode 100644 index 79cc01cfdf40..000000000000 --- a/lib/mpl_toolkits/axes_grid/ChangeLog +++ /dev/null @@ -1,13 +0,0 @@ -2009-06-01 Jae-Joon Lee - - * axislines.py (Axes.toggle_axisline): fix broken spine support. - (AxisArtistHelper): Initial support for curvelinear grid and ticks. - -2009-05-04 Jae-Joon Lee - - * inset_locator.py (inset_axes, zoomed_inset_axes): axes_class support - - * axislines.py : Better support for tick (tick label) color - handling - (Axes.get_children): fix typo - From ff6139c84bbba5b9cb6ed035b94f1390364fca3d Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Fri, 24 Mar 2017 03:15:50 -0400 Subject: [PATCH 2/6] Remove cross-references to axes_grid. This is provided for backwards-compatibility, so point directly to the implementations instead of the compatibility location. --- .flake8 | 3 +-- lib/mpl_toolkits/axes_grid/axes_divider.py | 10 +++---- lib/mpl_toolkits/axes_grid/axes_grid.py | 29 +++------------------ lib/mpl_toolkits/axes_grid/axes_rgb.py | 3 ++- lib/mpl_toolkits/axes_grid/parasite_axes.py | 3 +-- lib/mpl_toolkits/axisartist/axes_divider.py | 2 +- 6 files changed, 13 insertions(+), 37 deletions(-) diff --git a/.flake8 b/.flake8 index 0884c4406392..3974ac55ea19 100644 --- a/.flake8 +++ b/.flake8 @@ -61,8 +61,7 @@ per-file-ignores = matplotlib/type1font.py: E731 mpl_toolkits/__init__.py: E261 - mpl_toolkits/axes_grid/axes_divider.py: E501 - mpl_toolkits/axes_grid/axes_rgb.py: E302, E501 + mpl_toolkits/axes_grid/axes_rgb.py: E501 mpl_toolkits/axes_grid1/axes_divider.py: E402, E501 mpl_toolkits/axes_grid1/axes_grid.py: E225 mpl_toolkits/axes_grid1/axes_rgb.py: E231 diff --git a/lib/mpl_toolkits/axes_grid/axes_divider.py b/lib/mpl_toolkits/axes_grid/axes_divider.py index 134902bdcb9e..87760bbb0dc4 100644 --- a/lib/mpl_toolkits/axes_grid/axes_divider.py +++ b/lib/mpl_toolkits/axes_grid/axes_divider.py @@ -1,5 +1,5 @@ -from mpl_toolkits.axes_grid1.axes_divider import Divider, AxesLocator, SubplotDivider, \ - AxesDivider, locatable_axes_factory, make_axes_locatable - -from mpl_toolkits.axes_grid.axislines import Axes -LocatableAxes = locatable_axes_factory(Axes) +from mpl_toolkits.axes_grid1.axes_divider import ( + AxesDivider, AxesLocator, Divider, SubplotDivider, locatable_axes_factory, + make_axes_locatable) +from mpl_toolkits.axisartist.axes_divider import LocatableAxes +from mpl_toolkits.axisartist.axislines import Axes diff --git a/lib/mpl_toolkits/axes_grid/axes_grid.py b/lib/mpl_toolkits/axes_grid/axes_grid.py index 49a77a1fb2e9..db7507bb8254 100644 --- a/lib/mpl_toolkits/axes_grid/axes_grid.py +++ b/lib/mpl_toolkits/axes_grid/axes_grid.py @@ -1,26 +1,3 @@ -import mpl_toolkits.axes_grid1.axes_grid as axes_grid_orig -from .axes_divider import LocatableAxes - - -class CbarAxes(axes_grid_orig.CbarAxesBase, LocatableAxes): - def __init__(self, *args, orientation, **kwargs): - self.orientation = orientation - self._default_label_on = False - self.locator = None - super().__init__(*args, **kwargs) - - def cla(self): - super().cla() - self._config_axes() - - -class Grid(axes_grid_orig.Grid): - _defaultLocatableAxesClass = LocatableAxes - - -class ImageGrid(axes_grid_orig.ImageGrid): - _defaultLocatableAxesClass = LocatableAxes - _defaultCbarAxesClass = CbarAxes - - -AxesGrid = ImageGrid +from mpl_toolkits.axisartist.axes_divider import LocatableAxes +from mpl_toolkits.axisartist.axes_grid import ( + AxesGrid, CbarAxes, Grid, ImageGrid) diff --git a/lib/mpl_toolkits/axes_grid/axes_rgb.py b/lib/mpl_toolkits/axes_grid/axes_rgb.py index 4112b0c82bae..8ec680ec9db7 100644 --- a/lib/mpl_toolkits/axes_grid/axes_rgb.py +++ b/lib/mpl_toolkits/axes_grid/axes_rgb.py @@ -2,7 +2,8 @@ from mpl_toolkits.axes_grid1.axes_rgb import make_rgb_axes, imshow_rgb, RGBAxesBase #import mpl_toolkits.axes_grid1.axes_rgb as axes_rgb_orig -from .axislines import Axes +from mpl_toolkits.axisartist.axislines import Axes + class RGBAxes(RGBAxesBase): _defaultAxesClass = Axes diff --git a/lib/mpl_toolkits/axes_grid/parasite_axes.py b/lib/mpl_toolkits/axes_grid/parasite_axes.py index 91fcd1f21de1..50d36677dd3a 100644 --- a/lib/mpl_toolkits/axes_grid/parasite_axes.py +++ b/lib/mpl_toolkits/axes_grid/parasite_axes.py @@ -1,8 +1,7 @@ from mpl_toolkits.axes_grid1.parasite_axes import ( host_axes_class_factory, parasite_axes_class_factory, parasite_axes_auxtrans_class_factory, subplot_class_factory) - -from .axislines import Axes +from mpl_toolkits.axisartist.axislines import Axes ParasiteAxes = parasite_axes_class_factory(Axes) diff --git a/lib/mpl_toolkits/axisartist/axes_divider.py b/lib/mpl_toolkits/axisartist/axes_divider.py index abc6556336fc..c1c18aae843f 100644 --- a/lib/mpl_toolkits/axisartist/axes_divider.py +++ b/lib/mpl_toolkits/axisartist/axes_divider.py @@ -2,5 +2,5 @@ Divider, AxesLocator, SubplotDivider, AxesDivider, locatable_axes_factory, make_axes_locatable) -from mpl_toolkits.axes_grid.axislines import Axes +from mpl_toolkits.axisartist.axislines import Axes LocatableAxes = locatable_axes_factory(Axes) From 15d9b8eecf2d39f185c3338d23dcacca6abf6c2c Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Fri, 24 Mar 2017 23:23:06 -0400 Subject: [PATCH 3/6] Deprecate LocatableAxesBase and make it a no-op. All its functionality is provided by the matplotlib.axes.Axes class now so it does not need to exist as all alternative Axes classes derive from the main one. --- lib/mpl_toolkits/axes_grid1/axes_divider.py | 49 +++------------------ 1 file changed, 7 insertions(+), 42 deletions(-) diff --git a/lib/mpl_toolkits/axes_grid1/axes_divider.py b/lib/mpl_toolkits/axes_grid1/axes_divider.py index 80c157e61188..dc3e502a5c1f 100644 --- a/lib/mpl_toolkits/axes_grid1/axes_divider.py +++ b/lib/mpl_toolkits/axes_grid1/axes_divider.py @@ -13,6 +13,7 @@ import functools import matplotlib.transforms as mtransforms +from matplotlib import cbook from matplotlib.axes import SubplotBase from . import axes_size as Size @@ -863,54 +864,18 @@ def locate(self, nx, ny, nx1=None, ny1=None, axes=None, renderer=None): return mtransforms.Bbox.from_bounds(x1, y1, w1, h1) +@cbook.deprecated('3.0', + addendum=' There is no alternative. Deriving from ' + 'matplotlib.axes.Axes provides this functionality ' + 'already.') class LocatableAxesBase(object): - def __init__(self, *kl, **kw): - - self._axes_class.__init__(self, *kl, **kw) - - self._locator = None - self._locator_renderer = None - - def set_axes_locator(self, locator): - self._locator = locator - - def get_axes_locator(self): - return self._locator - - def apply_aspect(self, position=None): - - if self.get_axes_locator() is None: - self._axes_class.apply_aspect(self, position) - else: - pos = self.get_axes_locator()(self, self._locator_renderer) - self._axes_class.apply_aspect(self, position=pos) - - def draw(self, renderer=None, inframe=False): - - self._locator_renderer = renderer - - self._axes_class.draw(self, renderer, inframe) - - def _make_twin_axes(self, *kl, **kwargs): - """ - Need to overload so that twinx/twiny will work with - these axes. - """ - if 'sharex' in kwargs and 'sharey' in kwargs: - raise ValueError("Twinned Axes may share only one axis.") - ax2 = type(self)(self.figure, self.get_position(True), *kl, **kwargs) - ax2.set_axes_locator(self.get_axes_locator()) - self.figure.add_axes(ax2) - self.set_adjustable('datalim') - ax2.set_adjustable('datalim') - self._twinned_axes.join(self, ax2) - return ax2 + pass @functools.lru_cache(None) def locatable_axes_factory(axes_class): return type("Locatable%s" % axes_class.__name__, - (LocatableAxesBase, axes_class), + (axes_class, ), {'_axes_class': axes_class}) From 947ebe9750314d186e02aaaf7c76c42fd8c6cebf Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Mon, 5 Feb 2018 21:46:47 -0500 Subject: [PATCH 4/6] Deprecate locatable_axes_factory and make it a no-op. It's similar to LocatableAxesBase and provided in base Axes classes. --- lib/mpl_toolkits/axes_grid1/axes_divider.py | 15 ++++++--------- lib/mpl_toolkits/axes_grid1/axes_rgb.py | 7 ++++--- lib/mpl_toolkits/axisartist/axes_divider.py | 2 +- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/lib/mpl_toolkits/axes_grid1/axes_divider.py b/lib/mpl_toolkits/axes_grid1/axes_divider.py index dc3e502a5c1f..f1a1dba5c70f 100644 --- a/lib/mpl_toolkits/axes_grid1/axes_divider.py +++ b/lib/mpl_toolkits/axes_grid1/axes_divider.py @@ -872,18 +872,15 @@ class LocatableAxesBase(object): pass -@functools.lru_cache(None) +@cbook.deprecated('3.0', + addendum=' There is no alternative. Classes derived from ' + 'matplotlib.axes.Axes provide this functionality ' + 'already.') def locatable_axes_factory(axes_class): - return type("Locatable%s" % axes_class.__name__, - (axes_class, ), - {'_axes_class': axes_class}) + return axes_class def make_axes_locatable(axes): - if not hasattr(axes, "set_axes_locator"): - new_class = locatable_axes_factory(type(axes)) - axes.__class__ = new_class - divider = AxesDivider(axes) locator = divider.new_locator(nx=0, ny=0) axes.set_axes_locator(locator) @@ -906,4 +903,4 @@ def make_axes_area_auto_adjustable(ax, #from matplotlib.axes import Axes from .mpl_axes import Axes -LocatableAxes = locatable_axes_factory(Axes) +LocatableAxes = Axes diff --git a/lib/mpl_toolkits/axes_grid1/axes_rgb.py b/lib/mpl_toolkits/axes_grid1/axes_rgb.py index 909a73ec8c4e..258acd48f1c5 100644 --- a/lib/mpl_toolkits/axes_grid1/axes_rgb.py +++ b/lib/mpl_toolkits/axes_grid1/axes_rgb.py @@ -1,5 +1,6 @@ import numpy as np -from .axes_divider import make_axes_locatable, Size, locatable_axes_factory + +from .axes_divider import make_axes_locatable, Size from .mpl_axes import Axes @@ -23,9 +24,9 @@ def make_rgb_axes(ax, pad=0.01, axes_class=None, add_all=True): ax_rgb = [] if axes_class is None: try: - axes_class = locatable_axes_factory(ax._axes_class) + axes_class = ax._axes_class except AttributeError: - axes_class = locatable_axes_factory(type(ax)) + axes_class = type(ax) for ny in [4, 2, 0]: ax1 = axes_class(ax.get_figure(), diff --git a/lib/mpl_toolkits/axisartist/axes_divider.py b/lib/mpl_toolkits/axisartist/axes_divider.py index c1c18aae843f..e712e3ea5560 100644 --- a/lib/mpl_toolkits/axisartist/axes_divider.py +++ b/lib/mpl_toolkits/axisartist/axes_divider.py @@ -3,4 +3,4 @@ make_axes_locatable) from mpl_toolkits.axisartist.axislines import Axes -LocatableAxes = locatable_axes_factory(Axes) +LocatableAxes = Axes From e041adcb4a3e65e87799386048e5dc3b45df132a Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Mon, 5 Feb 2018 22:51:18 -0500 Subject: [PATCH 5/6] Deprecate any LocatableAxes in toolkits. It's now no longer used for anything, since maxes.Axes is locatable already. --- lib/mpl_toolkits/axes_grid1/axes_divider.py | 17 ++++++++++++++--- lib/mpl_toolkits/axes_grid1/axes_grid.py | 13 +++++++------ lib/mpl_toolkits/axisartist/axes_divider.py | 17 +++++++++++++++-- lib/mpl_toolkits/axisartist/axes_grid.py | 8 ++++---- 4 files changed, 40 insertions(+), 15 deletions(-) diff --git a/lib/mpl_toolkits/axes_grid1/axes_divider.py b/lib/mpl_toolkits/axes_grid1/axes_divider.py index f1a1dba5c70f..48d0f792672a 100644 --- a/lib/mpl_toolkits/axes_grid1/axes_divider.py +++ b/lib/mpl_toolkits/axes_grid1/axes_divider.py @@ -901,6 +901,17 @@ def make_axes_area_auto_adjustable(ax, divider.add_auto_adjustable_area(use_axes=use_axes, pad=pad, adjust_dirs=adjust_dirs) -#from matplotlib.axes import Axes -from .mpl_axes import Axes -LocatableAxes = Axes + +from .mpl_axes import Axes as _Axes + + +@cbook.deprecated('3.0', + alternative='mpl_toolkits.axes_grid1.mpl_axes.Axes') +class Axes(_Axes): + pass + + +@cbook.deprecated('3.0', + alternative='mpl_toolkits.axes_grid1.mpl_axes.Axes') +class LocatableAxes(_Axes): + pass diff --git a/lib/mpl_toolkits/axes_grid1/axes_grid.py b/lib/mpl_toolkits/axes_grid1/axes_grid.py index 5a7f9057f16e..773ef257f66e 100644 --- a/lib/mpl_toolkits/axes_grid1/axes_grid.py +++ b/lib/mpl_toolkits/axes_grid1/axes_grid.py @@ -4,8 +4,9 @@ import matplotlib.ticker as ticker from matplotlib.gridspec import SubplotSpec -from .axes_divider import Size, SubplotDivider, LocatableAxes, Divider +from .axes_divider import Size, SubplotDivider, Divider from .colorbar import Colorbar +from .mpl_axes import Axes def _extend_axes_pad(value): @@ -100,7 +101,7 @@ def toggle_label(self, b): #axis.label.set_visible(b) -class CbarAxes(CbarAxesBase, LocatableAxes): +class CbarAxes(CbarAxesBase, Axes): def __init__(self, *args, orientation, **kwargs): self.orientation = orientation self._default_label_on = True @@ -122,7 +123,7 @@ class Grid(object): be easily done in matplotlib. AxesGrid is used in such case. """ - _defaultLocatableAxesClass = LocatableAxes + _defaultAxesClass = Axes def __init__(self, fig, rect, @@ -182,12 +183,12 @@ def __init__(self, fig, self._direction = direction if axes_class is None: - axes_class = self._defaultLocatableAxesClass + axes_class = self._defaultAxesClass axes_class_args = {} else: if (isinstance(axes_class, type) and issubclass(axes_class, - self._defaultLocatableAxesClass.Axes)): + self._defaultAxesClass.Axes)): axes_class_args = {} else: axes_class, axes_class_args = axes_class @@ -503,7 +504,7 @@ def __init__(self, fig, self._direction = direction if axes_class is None: - axes_class = self._defaultLocatableAxesClass + axes_class = self._defaultAxesClass axes_class_args = {} else: if isinstance(axes_class, maxes.Axes): diff --git a/lib/mpl_toolkits/axisartist/axes_divider.py b/lib/mpl_toolkits/axisartist/axes_divider.py index e712e3ea5560..9287adb8b7f7 100644 --- a/lib/mpl_toolkits/axisartist/axes_divider.py +++ b/lib/mpl_toolkits/axisartist/axes_divider.py @@ -1,6 +1,19 @@ +from matplotlib import cbook + from mpl_toolkits.axes_grid1.axes_divider import ( Divider, AxesLocator, SubplotDivider, AxesDivider, locatable_axes_factory, make_axes_locatable) -from mpl_toolkits.axisartist.axislines import Axes -LocatableAxes = Axes +from mpl_toolkits.axisartist.axislines import Axes as _Axes + + +@cbook.deprecated('3.0', + alternative='mpl_toolkits.axisartist.axislines.Axes') +class Axes(_Axes): + pass + + +@cbook.deprecated('3.0', + alternative='mpl_toolkits.axisartist.axislines.Axes') +class LocatableAxes(_Axes): + pass diff --git a/lib/mpl_toolkits/axisartist/axes_grid.py b/lib/mpl_toolkits/axisartist/axes_grid.py index 49a77a1fb2e9..fe3bd43ce7d8 100644 --- a/lib/mpl_toolkits/axisartist/axes_grid.py +++ b/lib/mpl_toolkits/axisartist/axes_grid.py @@ -1,8 +1,8 @@ import mpl_toolkits.axes_grid1.axes_grid as axes_grid_orig -from .axes_divider import LocatableAxes +from .axislines import Axes -class CbarAxes(axes_grid_orig.CbarAxesBase, LocatableAxes): +class CbarAxes(axes_grid_orig.CbarAxesBase, Axes): def __init__(self, *args, orientation, **kwargs): self.orientation = orientation self._default_label_on = False @@ -15,11 +15,11 @@ def cla(self): class Grid(axes_grid_orig.Grid): - _defaultLocatableAxesClass = LocatableAxes + _defaultAxesClass = Axes class ImageGrid(axes_grid_orig.ImageGrid): - _defaultLocatableAxesClass = LocatableAxes + _defaultAxesClass = Axes _defaultCbarAxesClass = CbarAxes From 7421b0e3944e8f52bac764c3f8484112725384b2 Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Fri, 9 Feb 2018 00:42:44 -0500 Subject: [PATCH 6/6] DOC: Add deprecation changelog for LocatableAxes stuff. --- doc/api/next_api_changes/2018-02-09-ES.rst | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 doc/api/next_api_changes/2018-02-09-ES.rst diff --git a/doc/api/next_api_changes/2018-02-09-ES.rst b/doc/api/next_api_changes/2018-02-09-ES.rst new file mode 100644 index 000000000000..c4c7ccd40da4 --- /dev/null +++ b/doc/api/next_api_changes/2018-02-09-ES.rst @@ -0,0 +1,19 @@ +Deprecation of ``LocatableAxes`` in toolkits +-------------------------------------------- + +The ``LocatableAxes`` classes in toolkits have been deprecated. The base `Axes` +classes provide the same functionality to all subclasses, thus these mixins are +no longer necessary. Related functions have also been deprecated. Specifically: + +* ``mpl_toolkits.axes_grid1.axes_divider.LocatableAxesBase``: no specific + replacement; use any other ``Axes``-derived class directly instead. +* ``mpl_toolkits.axes_grid1.axes_divider.locatable_axes_factory``: no specific + replacement; use any other ``Axes``-derived class directly instead. +* ``mpl_toolkits.axes_grid1.axes_divider.Axes``: use + `mpl_toolkits.axes_grid1.mpl_axes.Axes` directly. +* ``mpl_toolkits.axes_grid1.axes_divider.LocatableAxes``: use + `mpl_toolkits.axes_grid1.mpl_axes.Axes` directly. +* ``mpl_toolkits.axisartist.axes_divider.Axes``: use + `mpl_toolkits.axisartist.axislines.Axes` directly. +* ``mpl_toolkits.axisartist.axes_divider.LocatableAxes``: use + `mpl_toolkits.axisartist.axislines.Axes` directly.