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/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. 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 - 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/axes_grid1/axes_divider.py b/lib/mpl_toolkits/axes_grid1/axes_divider.py index 80c157e61188..48d0f792672a 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,62 +864,23 @@ 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): + pass - 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 - - -@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__, - (LocatableAxesBase, 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) @@ -939,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 = locatable_axes_factory(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/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 abc6556336fc..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.axes_grid.axislines import Axes -LocatableAxes = locatable_axes_factory(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