Skip to content

Deprecate LocatableAxes from toolkits #10403

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Jul 19, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .flake8
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
19 changes: 19 additions & 0 deletions doc/api/next_api_changes/2018-02-09-ES.rst
Original file line number Diff line number Diff line change
@@ -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.
13 changes: 0 additions & 13 deletions lib/mpl_toolkits/axes_grid/ChangeLog

This file was deleted.

10 changes: 5 additions & 5 deletions lib/mpl_toolkits/axes_grid/axes_divider.py
Original file line number Diff line number Diff line change
@@ -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
29 changes: 3 additions & 26 deletions lib/mpl_toolkits/axes_grid/axes_grid.py
Original file line number Diff line number Diff line change
@@ -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)
3 changes: 2 additions & 1 deletion lib/mpl_toolkits/axes_grid/axes_rgb.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
3 changes: 1 addition & 2 deletions lib/mpl_toolkits/axes_grid/parasite_axes.py
Original file line number Diff line number Diff line change
@@ -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)
Expand Down
77 changes: 25 additions & 52 deletions lib/mpl_toolkits/axes_grid1/axes_divider.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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())
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The base Axes._make_twin_axes is missing this locator-copying line--maybe that is a bug.

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)
Expand All @@ -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
13 changes: 7 additions & 6 deletions lib/mpl_toolkits/axes_grid1/axes_grid.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -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
Expand All @@ -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,
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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):
Expand Down
7 changes: 4 additions & 3 deletions lib/mpl_toolkits/axes_grid1/axes_rgb.py
Original file line number Diff line number Diff line change
@@ -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


Expand All @@ -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(),
Expand Down
17 changes: 15 additions & 2 deletions lib/mpl_toolkits/axisartist/axes_divider.py
Original file line number Diff line number Diff line change
@@ -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
8 changes: 4 additions & 4 deletions lib/mpl_toolkits/axisartist/axes_grid.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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


Expand Down