From 543bb402c4a90f192330d7f81f9cccba2cac703f Mon Sep 17 00:00:00 2001 From: AlexCav Date: Sun, 11 Mar 2018 12:48:06 -0700 Subject: [PATCH 1/2] Bugfix for issue #8120 - inconsistent inset_axes position --- lib/mpl_toolkits/axes_grid1/inset_locator.py | 16 ++-- .../test_axes_grid1/inset_axes.png | Bin 0 -> 9928 bytes lib/mpl_toolkits/tests/test_axes_grid1.py | 69 +++++++++++++++++- 3 files changed, 78 insertions(+), 7 deletions(-) create mode 100644 lib/mpl_toolkits/tests/baseline_images/test_axes_grid1/inset_axes.png diff --git a/lib/mpl_toolkits/axes_grid1/inset_locator.py b/lib/mpl_toolkits/axes_grid1/inset_locator.py index 08e80ee03817..d1f96432d46b 100644 --- a/lib/mpl_toolkits/axes_grid1/inset_locator.py +++ b/lib/mpl_toolkits/axes_grid1/inset_locator.py @@ -90,7 +90,6 @@ def __call__(self, ax, renderer): class AnchoredSizeLocator(AnchoredLocatorBase): def __init__(self, bbox_to_anchor, x_size, y_size, loc, borderpad=0.5, bbox_transform=None): - super().__init__( bbox_to_anchor, None, loc, borderpad=borderpad, bbox_transform=bbox_transform @@ -105,16 +104,16 @@ def get_extent(self, renderer): dpi = renderer.points_to_pixels(72.) r, a = self.x_size.get_size(renderer) - width = w*r + a*dpi + width = w * r + a * dpi r, a = self.y_size.get_size(renderer) - height = h*r + a*dpi + height = h * r + a * dpi xd, yd = 0, 0 fontsize = renderer.points_to_pixels(self.prop.get_size_in_points()) pad = self.pad * fontsize - return width+2*pad, height+2*pad, xd+pad, yd+pad + return width + 2 * pad, height + 2 * pad, xd + pad, yd + pad class AnchoredZoomLocator(AnchoredLocatorBase): @@ -122,7 +121,6 @@ def __init__(self, parent_axes, zoom, loc, borderpad=0.5, bbox_to_anchor=None, bbox_transform=None): - self.parent_axes = parent_axes self.zoom = zoom @@ -141,7 +139,7 @@ def get_extent(self, renderer): fontsize = renderer.points_to_pixels(self.prop.get_size_in_points()) pad = self.pad * fontsize - return abs(w*self.zoom)+2*pad, abs(h*self.zoom)+2*pad, pad, pad + return abs(w * self.zoom) + 2 * pad, abs(h * self.zoom) + 2 * pad, pad, pad class BboxPatch(Patch): @@ -184,6 +182,7 @@ def get_path(self): Path.CLOSEPOLY] return Path(verts, codes) + get_path.__doc__ = Patch.get_path.__doc__ @@ -318,6 +317,7 @@ def __init__(self, bbox1, bbox2, loc1, loc2=None, **kwargs): def get_path(self): return self.connect_bbox(self.bbox1, self.bbox2, self.loc1, self.loc2) + get_path.__doc__ = Patch.get_path.__doc__ @@ -373,6 +373,7 @@ def get_path(self): list(path2.vertices) + [path1.vertices[0]]) return Path(path_merged) + get_path.__doc__ = BboxConnector.get_path.__doc__ @@ -453,6 +454,9 @@ def inset_axes(parent_axes, width, height, loc=1, if bbox_to_anchor is None: bbox_to_anchor = parent_axes.bbox + if bbox_transform is None: + bbox_transform = parent_axes.transAxes + axes_locator = AnchoredSizeLocator(bbox_to_anchor, width, height, loc=loc, diff --git a/lib/mpl_toolkits/tests/baseline_images/test_axes_grid1/inset_axes.png b/lib/mpl_toolkits/tests/baseline_images/test_axes_grid1/inset_axes.png new file mode 100644 index 0000000000000000000000000000000000000000..90498f5d441beff8e0d04b4f0f650801bf5f756f GIT binary patch literal 9928 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 fTu%D?m;%X<%Uh+fSq8VSAR4!|Z Date: Mon, 12 Mar 2018 15:32:37 -0700 Subject: [PATCH 2/2] Fixed pep8 failures in test_axes_grid1.py --- lib/mpl_toolkits/tests/test_axes_grid1.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/mpl_toolkits/tests/test_axes_grid1.py b/lib/mpl_toolkits/tests/test_axes_grid1.py index 412b210501d1..740eb37889bd 100644 --- a/lib/mpl_toolkits/tests/test_axes_grid1.py +++ b/lib/mpl_toolkits/tests/test_axes_grid1.py @@ -9,7 +9,11 @@ from mpl_toolkits.axes_grid1 import host_subplot from mpl_toolkits.axes_grid1 import make_axes_locatable from mpl_toolkits.axes_grid1 import AxesGrid -from mpl_toolkits.axes_grid1.inset_locator import zoomed_inset_axes, mark_inset, inset_axes +from mpl_toolkits.axes_grid1.inset_locator import ( + zoomed_inset_axes, + mark_inset, + inset_axes +) from mpl_toolkits.axes_grid1.anchored_artists import AnchoredSizeBar from matplotlib.colors import LogNorm @@ -180,7 +184,7 @@ def get_demo_image(): origin="lower") # creating our inset axes without a bbox_transform parameter - axins = inset_axes(ax, width=1., height=1., bbox_to_anchor=(1,1)) + axins = inset_axes(ax, width=1., height=1., bbox_to_anchor=(1, 1)) axins.imshow(Z2, extent=extent, interpolation="nearest", origin="lower") @@ -209,7 +213,7 @@ def get_demo_image(): def test_inset_axes_without_transform_should_use_parent_axes(): # creating our figure - fig = plt.figure(dpi=150); + fig = plt.figure(dpi=150) # gca method gets current axes of the figure ax = plt.gca()