Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit cc8df4f

Browse files
committed
Define FloatingAxes boundary patch in data coordinates.
Currently, the boundary patch of FloatingAxes is drawn in "parent axes data" (rectilinear) coordinates, using manual interpolation as defined in get_boundary. Instead, it can be defined in child axes data coordinates, and use `helper_trf + transData` as transform, relying on interpolation mechanisms already present in the transform machinery (for example, this means that polar FloatingAxes benefit from the more-accurate transforming of circular arcs). Likewise, adjust_axes_lim can use normal path methods to get its extents, rather than relying on manual interpolation. This is the cause of the baseline image tolerance change: in test_curvelinear3, for example, we now have exactly `bbox.xmin = bbox.ymin = -10` and `bbox.xmax = bbox.ymax = +10` rather than slightly different values arising from interpolation and inaccurate transform composition. (But one can manually check that the changes are all just tiny shifts.) (On the other hand, I'll likely further change these baselines in the future, so let's not update the files right now.)
1 parent 3d5c6d5 commit cc8df4f

File tree

3 files changed

+27
-17
lines changed

3 files changed

+27
-17
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
``floating_axes.GridHelperCurveLinear.get_boundary``
2+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3+
... is deprecated, with no replacement.

lib/mpl_toolkits/axisartist/floating_axes.py

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import numpy as np
99

10-
from matplotlib import cbook
10+
from matplotlib import _api, cbook
1111
import matplotlib.patches as mpatches
1212
from matplotlib.path import Path
1313
import matplotlib.axes as maxes
@@ -287,6 +287,7 @@ def get_gridlines(self, which="major", axis="both"):
287287
grid_lines.extend(self._grid_info["lat_lines"])
288288
return grid_lines
289289

290+
@_api.deprecated("3.5")
290291
def get_boundary(self):
291292
"""
292293
Return (N, 2) array of (x, y) coordinate of the boundary.
@@ -322,11 +323,19 @@ def __init__(self, *args, **kwargs):
322323

323324
def _gen_axes_patch(self):
324325
# docstring inherited
325-
return mpatches.Polygon(self.get_grid_helper().get_boundary())
326+
# Using a public API to access _extremes.
327+
(x0, _), (x1, _), (y0, _), (y1, _) = map(
328+
self.get_grid_helper().get_data_boundary,
329+
["left", "right", "bottom", "top"])
330+
patch = mpatches.Polygon([(x0, y0), (x1, y0), (x1, y1), (x0, y1)])
331+
patch.get_path()._interpolation_steps = 100
332+
return patch
326333

327334
def cla(self):
328335
super().cla()
329-
self.patch.set_transform(self.transData)
336+
self.patch.set_transform(
337+
self.get_grid_helper().grid_finder.get_transform()
338+
+ self.transData)
330339
# The original patch is not in the draw tree; it is only used for
331340
# clipping purposes.
332341
orig_patch = super()._gen_axes_patch()
@@ -336,18 +345,12 @@ def cla(self):
336345
self.gridlines.set_clip_path(orig_patch)
337346

338347
def adjust_axes_lim(self):
339-
grid_helper = self.get_grid_helper()
340-
t = grid_helper.get_boundary()
341-
x, y = t[:, 0], t[:, 1]
342-
343-
xmin, xmax = min(x), max(x)
344-
ymin, ymax = min(y), max(y)
345-
346-
dx = (xmax-xmin) / 100
347-
dy = (ymax-ymin) / 100
348-
349-
self.set_xlim(xmin-dx, xmax+dx)
350-
self.set_ylim(ymin-dy, ymax+dy)
348+
bbox = self.patch.get_path().get_extents(
349+
# First transform to pixel coords, then to parent data coords.
350+
self.patch.get_transform() - self.transData)
351+
bbox = bbox.expanded(1.02, 1.02)
352+
self.set_xlim(bbox.xmin, bbox.xmax)
353+
self.set_ylim(bbox.ymin, bbox.ymax)
351354

352355

353356
floatingaxes_class_factory = cbook._make_class_factory(

lib/mpl_toolkits/tests/test_axisartist_floating_axes.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ def test_subplot():
1818
fig.add_subplot(ax)
1919

2020

21-
@image_comparison(['curvelinear3.png'], style='default', tol=0.01)
21+
# Rather high tolerance to allow ongoing work with floating axes internals;
22+
# remove when image is regenerated.
23+
@image_comparison(['curvelinear3.png'], style='default', tol=5)
2224
def test_curvelinear3():
2325
fig = plt.figure(figsize=(5, 5))
2426

@@ -72,7 +74,9 @@ def test_curvelinear3():
7274
l.set_clip_path(ax1.patch)
7375

7476

75-
@image_comparison(['curvelinear4.png'], style='default', tol=0.015)
77+
# Rather high tolerance to allow ongoing work with floating axes internals;
78+
# remove when image is regenerated.
79+
@image_comparison(['curvelinear4.png'], style='default', tol=0.9)
7680
def test_curvelinear4():
7781
# Remove this line when this test image is regenerated.
7882
plt.rcParams['text.kerning_factor'] = 6

0 commit comments

Comments
 (0)