diff --git a/doc/api/next_api_changes/2019-04-16-AL.rst b/doc/api/next_api_changes/2019-04-16-AL.rst new file mode 100644 index 000000000000..058f57ef3219 --- /dev/null +++ b/doc/api/next_api_changes/2019-04-16-AL.rst @@ -0,0 +1,7 @@ +Deprecations +```````````` + +Returning a factor equal to None from axisartist Locators (which are **not** +the same as "standard" tick Locators), or passing a factor equal to None +to axisartist Formatters (which are **not** the same as "standard" tick +Formatters) is deprecated. Pass a factor equal to 1 instead. diff --git a/lib/mpl_toolkits/axisartist/grid_finder.py b/lib/mpl_toolkits/axisartist/grid_finder.py index da40a4cd4fc1..85bf22b00db0 100644 --- a/lib/mpl_toolkits/axisartist/grid_finder.py +++ b/lib/mpl_toolkits/axisartist/grid_finder.py @@ -5,6 +5,16 @@ from .clip_path import clip_line_to_rect +def _deprecate_factor_none(factor): + # After the deprecation period, calls to _deprecate_factor_none can just be + # removed. + if factor is None: + cbook.warn_deprecated( + "3.2", "factor=None is deprecated; use/return factor=1 instead") + factor = 1 + return factor + + # extremes finder class ExtremeFinderSimple(object): def __init__(self, nx, ny): @@ -88,14 +98,8 @@ def get_grid_info(self, x1, y1, x2, y2): lon_levs, lon_n, lon_factor = self.grid_locator1(lon_min, lon_max) lat_levs, lat_n, lat_factor = self.grid_locator2(lat_min, lat_max) - if lon_factor is None: - lon_values = np.asarray(lon_levs[:lon_n]) - else: - lon_values = np.asarray(lon_levs[:lon_n]/lon_factor) - if lat_factor is None: - lat_values = np.asarray(lat_levs[:lat_n]) - else: - lat_values = np.asarray(lat_levs[:lat_n]/lat_factor) + lon_values = lon_levs[:lon_n] / _deprecate_factor_none(lon_factor) + lat_values = lat_levs[:lat_n] / _deprecate_factor_none(lat_factor) lon_lines, lat_lines = self._get_raw_grid_lines(lon_values, lat_values, @@ -226,37 +230,29 @@ def __init__(self, nbins=10, steps=None, integer=integer, symmetric=symmetric, prune=prune) self.create_dummy_axis() - self._factor = None + self._factor = 1 def __call__(self, v1, v2): - if self._factor is not None: - self.set_bounds(v1*self._factor, v2*self._factor) - locs = mticker.MaxNLocator.__call__(self) - return np.array(locs), len(locs), self._factor - else: - self.set_bounds(v1, v2) - locs = mticker.MaxNLocator.__call__(self) - return np.array(locs), len(locs), None + self.set_bounds(v1 * self._factor, v2 * self._factor) + locs = mticker.MaxNLocator.__call__(self) + return np.array(locs), len(locs), self._factor def set_factor(self, f): - self._factor = f + self._factor = _deprecate_factor_none(f) class FixedLocator(object): def __init__(self, locs): self._locs = locs - self._factor = None + self._factor = 1 def __call__(self, v1, v2): - if self._factor is None: - v1, v2 = sorted([v1, v2]) - else: - v1, v2 = sorted([v1*self._factor, v2*self._factor]) + v1, v2 = sorted([v1 * self._factor, v2 * self._factor]) locs = np.array([l for l in self._locs if v1 <= l <= v2]) return locs, len(locs), self._factor def set_factor(self, f): - self._factor = f + self._factor = _deprecate_factor_none(f) # Tick Formatter @@ -270,9 +266,7 @@ def __init__(self, useMathText=True): def __call__(self, direction, factor, values): if not self._ignore_factor: - if factor is None: - factor = 1 - values = [v / factor for v in values] + values = [v / _deprecate_factor_none(factor) for v in values] return self._fmt.format_ticks(values) @@ -290,13 +284,10 @@ def __call__(self, direction, factor, values): """ factor is ignored if value is found in the dictionary """ - if self._fallback_formatter: fallback_strings = self._fallback_formatter( direction, factor, values) else: - fallback_strings = [""]*len(values) - - r = [self._format_dict.get(k, v) for k, v in zip(values, - fallback_strings)] - return r + fallback_strings = [""] * len(values) + return [self._format_dict.get(k, v) + for k, v in zip(values, fallback_strings)] diff --git a/lib/mpl_toolkits/axisartist/grid_helper_curvelinear.py b/lib/mpl_toolkits/axisartist/grid_helper_curvelinear.py index 9963c6a73c59..0fb5760cfc3d 100644 --- a/lib/mpl_toolkits/axisartist/grid_helper_curvelinear.py +++ b/lib/mpl_toolkits/axisartist/grid_helper_curvelinear.py @@ -9,7 +9,7 @@ from matplotlib.transforms import Affine2D, IdentityTransform from .axislines import AxisArtistHelper, GridHelperBase from .axis_artist import AxisArtist -from .grid_finder import GridFinder +from .grid_finder import GridFinder, _deprecate_factor_none class FixedAxisArtistHelper(AxisArtistHelper.Fixed): @@ -132,12 +132,12 @@ def update_lim(self, axes): self.grid_info = { "extremes": extremes, - "lon_info": (lon_levs, lon_n, lon_factor), - "lat_info": (lat_levs, lat_n, lat_factor), + "lon_info": (lon_levs, lon_n, _deprecate_factor_none(lon_factor)), + "lat_info": (lat_levs, lat_n, _deprecate_factor_none(lat_factor)), "lon_labels": grid_finder.tick_formatter1( - "bottom", lon_factor, lon_levs), + "bottom", _deprecate_factor_none(lon_factor), lon_levs), "lat_labels": grid_finder.tick_formatter2( - "bottom", lat_factor, lat_levs), + "bottom", _deprecate_factor_none(lat_factor), lat_levs), "line_xy": (xx, yy), } @@ -183,21 +183,13 @@ def get_tick_iterators(self, axes): lat_levs, lat_n, lat_factor = self.grid_info["lat_info"] lat_levs = np.asarray(lat_levs) - if lat_factor is not None: - yy0 = lat_levs / lat_factor - dy = 0.01 / lat_factor - else: - yy0 = lat_levs - dy = 0.01 + yy0 = lat_levs / _deprecate_factor_none(lat_factor) + dy = 0.01 / _deprecate_factor_none(lat_factor) lon_levs, lon_n, lon_factor = self.grid_info["lon_info"] lon_levs = np.asarray(lon_levs) - if lon_factor is not None: - xx0 = lon_levs / lon_factor - dx = 0.01 / lon_factor - else: - xx0 = lon_levs - dx = 0.01 + xx0 = lon_levs / _deprecate_factor_none(lon_factor) + dx = 0.01 / _deprecate_factor_none(lon_factor) if None in self._extremes: e0, e1 = self._extremes