Skip to content

Commit 11b3f94

Browse files
committed
FIX: Axes.indicate_inset* methods
See #14275 1. Methods now return a tuple as documented, instead of a list. 2. indicate_inset() now does not error when optional inset_ax is not passed, but returns None instead of a tuple.
1 parent 4e2190e commit 11b3f94

File tree

2 files changed

+43
-18
lines changed

2 files changed

+43
-18
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
`matplotlib.axes.Axes.indicate_inset` returns a 4-tuple as documented
2+
---------------------------------------------------------------------
3+
4+
In <= 3.1.0, `matplotlib.axes.Axes.indicate_inset` and
5+
`matplotlib.axes.Axes.indicate_inset_zoom` were documented as returning
6+
a 4-tuple of `matplotlib.patches.ConnectionPatch`es, where in fact they
7+
returned a 4-length list.
8+
9+
They now correctly return a 4-tuple.
10+
`matplotlib.axes.Axes.indicate_inset` would previously raise an error if
11+
the optional *inset_ax* was not supplied; it now completes successfully,
12+
and returns *None* instead of the tuple of ``ConnectionPatch``es.

lib/matplotlib/axes/_axes.py

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,20 @@
88
import numpy as np
99
from numpy import ma
1010

11-
from matplotlib import _preprocess_data, rcParams
11+
import matplotlib.category as _ # <-registers a category unit converter
1212
import matplotlib.cbook as cbook
1313
import matplotlib.collections as mcoll
1414
import matplotlib.colors as mcolors
1515
import matplotlib.contour as mcontour
16-
import matplotlib.category as _ # <-registers a category unit converter
1716
import matplotlib.dates as _ # <-registers a date unit converter
1817
import matplotlib.docstring as docstring
1918
import matplotlib.image as mimage
2019
import matplotlib.legend as mlegend
2120
import matplotlib.lines as mlines
2221
import matplotlib.markers as mmarkers
2322
import matplotlib.mlab as mlab
24-
import matplotlib.path as mpath
2523
import matplotlib.patches as mpatches
24+
import matplotlib.path as mpath
2625
import matplotlib.quiver as mquiver
2726
import matplotlib.stackplot as mstack
2827
import matplotlib.streamplot as mstream
@@ -31,9 +30,10 @@
3130
import matplotlib.ticker as mticker
3231
import matplotlib.transforms as mtransforms
3332
import matplotlib.tri as mtri
34-
from matplotlib.container import BarContainer, ErrorbarContainer, StemContainer
33+
from matplotlib import _preprocess_data, rcParams
3534
from matplotlib.axes._base import _AxesBase, _process_plot_format
3635
from matplotlib.axes._secondary_axes import SecondaryAxis
36+
from matplotlib.container import BarContainer, ErrorbarContainer, StemContainer
3737

3838
try:
3939
from numpy.lib.histograms import histogram_bin_edges
@@ -516,9 +516,12 @@ def indicate_inset(self, bounds, inset_ax=None, *, transform=None,
516516
rectangle_patch : `.Patches.Rectangle`
517517
Rectangle artist.
518518
519-
connector_lines : 4-tuple of `.Patches.ConnectionPatch`
520-
One for each of four connector lines. Two are set with visibility
521-
to *False*, but the user can set the visibility to True if the
519+
connector_lines : optional 4-tuple of `.Patches.ConnectionPatch`
520+
Each of four connector lines coming from the given rectangle
521+
on this axes in the order lower left, upper left, lower right,
522+
upper right: *None* if *inset_ax* is *None*.
523+
Two are set with visibility to *False*,
524+
but the user can set the visibility to *True* if the
522525
automatic choice is not deemed correct.
523526
524527
"""
@@ -537,25 +540,31 @@ def indicate_inset(self, bounds, inset_ax=None, *, transform=None,
537540
zorder=zorder, label=label, transform=transform, **kwargs)
538541
self.add_patch(rectpatch)
539542

543+
connects = []
544+
540545
if inset_ax is not None:
541546
# want to connect the indicator to the rect....
542-
connects = []
543547
xr = [bounds[0], bounds[0]+bounds[2]]
544548
yr = [bounds[1], bounds[1]+bounds[3]]
545549
for xc in range(2):
546550
for yc in range(2):
547551
xyA = (xc, yc)
548552
xyB = (xr[xc], yr[yc])
549-
connects += [mpatches.ConnectionPatch(xyA, xyB,
553+
connects.append(
554+
mpatches.ConnectionPatch(
555+
xyA, xyB,
550556
'axes fraction', 'data',
551557
axesA=inset_ax, axesB=self, arrowstyle="-",
552-
zorder=zorder, edgecolor=edgecolor, alpha=alpha)]
558+
zorder=zorder, edgecolor=edgecolor, alpha=alpha
559+
)
560+
)
553561
self.add_patch(connects[-1])
554562
# decide which two of the lines to keep visible....
555563
pos = inset_ax.get_position()
556564
bboxins = pos.transformed(self.figure.transFigure)
557565
rectbbox = mtransforms.Bbox.from_bounds(
558-
*bounds).transformed(transform)
566+
*bounds
567+
).transformed(transform)
559568
x0 = rectbbox.x0 < bboxins.x0
560569
x1 = rectbbox.x1 < bboxins.x1
561570
y0 = rectbbox.y0 < bboxins.y0
@@ -565,7 +574,7 @@ def indicate_inset(self, bounds, inset_ax=None, *, transform=None,
565574
connects[2].set_visible(x1 == y0)
566575
connects[3].set_visible(x1 ^ y1)
567576

568-
return rectpatch, connects
577+
return rectpatch, tuple(connects) if connects else None
569578

570579
def indicate_inset_zoom(self, inset_ax, **kwargs):
571580
"""
@@ -585,25 +594,29 @@ def indicate_inset_zoom(self, inset_ax, **kwargs):
585594
chosen so as to not overlap with the indicator box.
586595
587596
**kwargs
588-
Other *kwargs* are passed on to `.Axes.inset_rectangle`
597+
Other *kwargs* are passed on to `.Axes.indicate_inset`
589598
590599
Returns
591600
-------
592601
rectangle_patch : `.Patches.Rectangle`
593602
Rectangle artist.
594603
595604
connector_lines : 4-tuple of `.Patches.ConnectionPatch`
596-
One for each of four connector lines. Two are set with visibility
597-
to *False*, but the user can set the visibility to True if the
598-
automatic choice is not deemed correct.
605+
Each of four connector lines coming from the rectangle drawn on
606+
this axis, in the order lower left, upper left, lower right,
607+
upper right.
608+
Two are set with visibility to *False*, but the user can
609+
set the visibility to *True* if the automatic choice is not deemed
610+
correct.
599611
600612
"""
601613

602614
xlim = inset_ax.get_xlim()
603615
ylim = inset_ax.get_ylim()
604-
rect = [xlim[0], ylim[0], xlim[1] - xlim[0], ylim[1] - ylim[0]]
616+
rect = (xlim[0], ylim[0], xlim[1] - xlim[0], ylim[1] - ylim[0])
605617
rectpatch, connects = self.indicate_inset(
606-
rect, inset_ax, **kwargs)
618+
rect, inset_ax, **kwargs
619+
)
607620

608621
return rectpatch, connects
609622

0 commit comments

Comments
 (0)