From 95ed49017bbc4df6132dca9b9b31e3711fdc213f Mon Sep 17 00:00:00 2001 From: Ruth Comer <10599679+rcomer@users.noreply.github.com> Date: Fri, 22 Nov 2024 17:56:57 +0000 Subject: [PATCH] indicate_inset transform support --- lib/matplotlib/axes/_axes.py | 2 +- lib/matplotlib/inset.py | 11 +++++- .../test_inset/zoom_inset_transform.png | Bin 0 -> 15638 bytes lib/matplotlib/tests/test_inset.py | 36 ++++++++++++++++++ 4 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 lib/matplotlib/tests/baseline_images/test_inset/zoom_inset_transform.png diff --git a/lib/matplotlib/axes/_axes.py b/lib/matplotlib/axes/_axes.py index c55f77811859..f91b3141c244 100644 --- a/lib/matplotlib/axes/_axes.py +++ b/lib/matplotlib/axes/_axes.py @@ -440,7 +440,7 @@ def indicate_inset(self, bounds=None, inset_ax=None, *, transform=None, transform : `.Transform` Transform for the rectangle coordinates. Defaults to - ``ax.transAxes``, i.e. the units of *rect* are in Axes-relative + ``ax.transData``, i.e. the units of *rect* are in the Axes' data coordinates. facecolor : :mpltype:`color`, default: 'none' diff --git a/lib/matplotlib/inset.py b/lib/matplotlib/inset.py index bab69491303e..52e1f635b35d 100644 --- a/lib/matplotlib/inset.py +++ b/lib/matplotlib/inset.py @@ -79,6 +79,13 @@ def _shared_setter(self, prop, val): artist.setp([self._rectangle, *self._connectors], prop, val) + @artist.Artist.axes.setter + def axes(self, new_axes): + # Set axes on the rectangle (required for some external transforms to work) as + # well as the InsetIndicator artist. + self.rectangle.axes = new_axes + artist.Artist.axes.fset(self, new_axes) + def set_alpha(self, alpha): # docstring inherited self._shared_setter('alpha', alpha) @@ -171,7 +178,7 @@ def _update_connectors(self): # parent artist. p = ConnectionPatch( xyA=xy_inset_ax, coordsA=self._inset_ax.transAxes, - xyB=xy_data, coordsB=self.axes.transData, + xyB=xy_data, coordsB=self.rectangle.get_data_transform(), arrowstyle="-", edgecolor=self._edgecolor, alpha=self.get_alpha(), linestyle=self._linestyle, linewidth=self._linewidth) @@ -182,7 +189,7 @@ def _update_connectors(self): existing.xy1 = xy_inset_ax existing.xy2 = xy_data existing.coords1 = self._inset_ax.transAxes - existing.coords2 = self.axes.transData + existing.coords2 = self.rectangle.get_data_transform() if existing is None: # decide which two of the lines to keep visible.... diff --git a/lib/matplotlib/tests/baseline_images/test_inset/zoom_inset_transform.png b/lib/matplotlib/tests/baseline_images/test_inset/zoom_inset_transform.png new file mode 100644 index 0000000000000000000000000000000000000000..4990efa5cfc9808e24469aaf46db5176bd429c89 GIT binary patch literal 15638 zcmeHud036>+xERyBb8z+nVMuyB@ILaqC!g2K%+#_tkR@bBC~c#lm?qhQcGzb7a_FM zB#Y8OM3SP_JbmX=d;j+D_kQnjeD9y%AFsnc?4zFbtoym|>pHLVI?wAlYqV2WX!^YA zgb*QpJso30=nO(=t^B>q_pyo-9Z&qRb}PX2k|o{MJ46ctCf`Gq#V7x+>fd&D7gIV z^YU(hdGOprB^A z-njVqBmVw-TLOD89z1w(eD;q&YVPjOxSo@f!>Ldx{fc!Lc(jG-MshLKusC`uyFJ@w zAC`6W=us@oL_K!=Q_I<{x4(I*N5{pz`S$Ieb&;=hMJ66-tNA+Oi&T*^@^@+W%$FQQK5_EOJ|7n3X0Oq|-#Sr2_9) z27Gz7@Uv&WK-Y)PG_vioop{6h_pirB2KrhbagBAk1@Bg#xA4sboec8QL>NpwXXLiU z?{Zd^DGn$5X|dbKZVqrIaDEs)@9)nE8vUuO5zxP5{`~o&D;APKERA)npeen-zu!bY zYENqYuuJpMke|Vh9hMy#w`=YeH2vTUzV_lkR!K>EdAQ`tn96(Ra@HN|2&)@A5!g05 zYFSuV*zoS%u7~el<4@Be;7>BfZ}bqk*N(ioCBD&HT2 zgLy6Ok*~EXV_qEK9k&d2rj@$6xES>L7i-B5-%GtnTFr1aaqd=T0RaIkBDdYEKfFzL zRzc8M!MUd&jY7?sJl_j`#G8sPia3*#o7-0=to60#w(f9yjGOo@AzL{r986N{Yk&Mm zfB88RIh6VCKCX+b`l354$3Ho6ee5gU@@KMF^j%zBI^rirldVgG(vGmxg^HIDaTU50 zBVw(lrfI&VX`*q2tmt%}Rr2ze0+~%w^aR<;KmYtX+}AlgHqhb_orGA~Y9T`e7t%yn z)trVRgsZNuF11vjuIO`5|3G{$Rq3O*N*dB9YO;^8Kds#vtmmb4W5E_bqBskW$i+UK z&FSyj7g^yD8you~Qw}Ry9$&R`)>+@ZjUy`=@x2++HP-AIByFs{VSr|ptG~HOkS95JwfN>? zMZ?RpGc*4lA)30^zBXBKL24(id;qQ=;)|o1s5YiiqP|}`V=;4RW=^! zb#-+;?Bnx>omP9ES6hFD*m>loVZ7#^C0FLY4BSM-7h}T&)~#E&E5*b((Rf#G6K+uGW&KEqfkUWQcbLP6G?{Pfh&P%gxJP|Pue|I_`u z&gwkw{3ZWHQE+aU$1Sp~Sm07)V`D+^M2Un}(EYA1moObJemQ)d;o;oIvAUw<{wu2VLKk~F%U6cbrM>Lpl zhL#rglP4#|=FG`{@Id5Vp)21^d@82$FmkIZPUDJ$1%ig_?hFzZPWVr1C)e%5d8L@t zzIbuAwj;~6r6g_Bt?KymbC%RNnsoUDNQL7z347C$mKw$_i`}_0cBk+s51Q?Deg;c? zy@p2pt5=tNjvcFar4lO}@ZhYvz8_}+98}lRl6-DIH|$npu3P8$*oc2mYsmQcKehZQ;>|W)_I@j{8}DR}l$dD~_`36eJ*cbAIYshi`HYAN42 zIB0(5%9SiXg787XAYH0;4HyHKWU`_IOG+`>hQNuAiLozv&*1#% z>Oz^ieqFqwS8mm+6w}lWU?){gmn>a+y5Ewx&kT$vnl=Akohj67bStgraFkt|X`N}q zLY-22;V46I-wxX9DF>*~25DHM5wmh1YDk)?=vf_QEiLBLr&~$l0bMzuhSCS$?{;I_DPQAl*irrk}mpeL~n({n0mrjfq%2gQ4NA=#BK|X9D z-02AbEH^j9MB|Q7)$Y;J4I_ntuPP9PD_5@cT#&3K8{KF{F3h5d zcWVGRjdlLyBp*#=kk0lVacM^O>&V>dWHVFEZQ6ML{Q1CT;Wr$W@AdW`WmbGG^zJkb*5iN?Sy=HZns94t zPq*c8?uj}9Gxp~vyM6~-BTvP8o(*LxJ^OM=wQZ=_xWYp)-Y~K6Pee0 z)2=m_9H$oc@ZlPud|KKnENth2OY2H`wDq?o8dH>tqL;-%V|&@@R=owX#Qq#PV{}+~ z-ioLS|B?PQKmsaTf4{0rv&c_-M4Y93GFU_3X&pmD!vO5SY8|5En3tY9Hg+5ZeW8TJ z3Lv(F!xpggEWgdqnaG25n^O654^GdA%}vDtW-kuZc3vhI&?7ywE^PV{-`3T+ zvVQ&c7_}#(O1$m%f@M@K4I2Ewrx7@46g<{xGi1%9XvD33Aq{l}Ja5kmQB(`C6d(r( z1ao_+u#U`3{3t)Yv!YDwx8HsPO?YFdHFoDqReUFEy>%3~?FA9C+7!&-(W8)UiI>3) zR93IP_4%^{aCq^oY0QeyaGl$`^o>y=7>nh z?V3B1?1$$E8&XwOHCZ;>G4{jl6Cxz>*ycZuWJkws@cU!OlG|SDUEccS86&u*kHK{J z^sEK5=<>mHre3@#WO40tMUKR1+Zg$JD9q0B_;D-5>Tn<1#(Ut0l?|UMdBiH@rF?yY_NnC@a7n4Q3_-C>o6lG@zd+|IXvm~A3DwpooX*cxmQ`h^u& zUR1X~P2^clw$*|MsH&;;buvqFFVOCHco=SRS`Yp2Uh7huuepKm&A7OGmhwlA9Ww)x z4h6=kDx}|^L&nsnx7+{27H%X_*~Z*X7ct^y3FIB?jw_iM4`5dCpR$h0#ixUVZK#!^ zaluMAd#n~I-qV(FpY*@a^Joi|u5k_^?sLOB3)0zJxSy7rlBg((fL~vwhJunD96j*q zlTL@%Ueqy^?J?2$wj$u^;{(AHW+3m;@$mx%HwD&dX|aX1Mp2&CSm4*26g1MMh8D8& z)hh}Nh&0*%Nj>(`ipX=Ip7Sn-fndC0vsKj8bYtc$68!`SL$ZTOhD&Ohs>i;;sQ?rB z`RP(y+rNLmKMAT<`}Wnnem&d8+E-@YMc!|-dnEs16l2mgqar-5M-ay*>7DmXQ&UV< z9ItM-GB-C`5&5fN!%0ioS<^Vv6FA+{HCp3?x2ZU+tTYHpp!aOy))w57To>Weh|U7p z9ewlWol1e0Y5oFvOJjF-_IEY&oW`OEJrK?)RfSQxc^B_BxdvE0W8F_rzh})H zIIUCO=7Feb-MvHjX=HKWkg?Vn=L(=OJ0~Y;Vzg@Fbwk6v55gsCJ6AGl3pFn8+qdtV zPa(Cc>%GFQyZIS;nYnH)+x*oo??*k$5ErQ65AzVfr6GOb%j)XtwO|iFyw{OH0NBbx zbgr@;xh+Av(@cBw=CyY692fjEdB+rUVA_N{VeQIlxZOQ)HYc5; z5f|^AuNCX^UuZV^+Wt1lnzkSM{k4kWbz)* zB8#0slyB_VDlD-+(WAT3 zPx$wJi=@^hLKES#x44G$*D^P_5ffAQ@#7zH=+QT>UzPl!Mbgd zb6%G*AI~E~W!3HNNl-Z?Hu#F1)A*fe>X0Wa)D8!w8{s+rS6E!ry4Pv@aw%$n$o03H!I&vS_9x({FJ8P@IxvhCFN><6h^VEJu#Nba5k~3O z4D;8ZS82 z98el7))hP(7RAr#zJrDm?JsZ~iPDdN*t`{c)aS}QRJ&qRhPg?G`KJ^9zURoGTfXH^ zu!cH{wwIM{rk1ON<=%9#IGnxLM#VNKci@b4P0w^%&t^8$hK-$)&nCH0&ff z6SBr&cWtupi6Z8)jmHa{-n5m6zY91SAT4?fu5lu2Ezc+fGr-{R(3ki=NLG5YdeuW#i}eO3KE9V#)?I}an>fa*#HyP-a!te_#Wj+$nxhkTe`r(ECVQ}3ue z96&EcgHN?NrzL}`al1Y?Xjf|4B6kbB=?vTin+=iU^y$;c&b<~EHIE;k`1sRzqV%E5 zK5TM^xa3S$-bWj?Fr@L^FzIrS5_Pg|q9kEFIX z@Re0!=OJDB|N3+m3RrCihmp$FjQ04lvMQ|_bY{VVyCy688jG+H@L0%3HlriO{chcz zblVNcD&-_6EIt(nwSWJ|O~GtM!89h5YB5X4hf{wv7gq$y3T{#0c&o>12Zv`jPNE}r zZc-KLz2eer2vMfy=g*9Et3uUJhiSg6^16L`imhW(teHm+9&CRcTzYKd7}a7A{y-vwbXpM??;>ZLlKJSWc|a z3zd-SyIozsL3aU@-*2zZD}QG40sn8l_Sh`jPb+b6+KTw9x^bRO407fc!aK>y+EI#A z{;AgwK=AeH`8fz7{0UtyV)TG+3(7L3Q*?BsU>~PwW_nR@Mvdd$8pp5buDI@rG2*df z6g@q3NH@LHI^}pk+p~-4?Q9$(xqNLz=&krLmCg%$FYG(ld(2qTKA9&>7Ug2Mn*;`EeJ3TEr>U0J5n#xWgkdl zu-VjIilwXj{KvL|@1u553T1DVRwo{7@4kKWbI}5#O!>?F@5ZisHIAGCZtFd6 zdYo{r@wY8)J^y*?oA)cbj+DzU;l&HaRVA z8tkbj)z~^HbJ&HaPoIWp`rI=59eVZnX#S2m6V;f7U)vTf_@m}4%aC?Vec`*DG*}Ce zoe=Akc=~berRd5fT{coD0Uy)qlp$v+UoE$`vf2Y?A^ev-bb+}soy5h)Qb7r%g=z^4 zCob1d>uHY5;#p_Mi<`*fP;w^XYZHI1Yp&>dq5eksS!YL`^s-ts9Y46iVCeE0sSR%N zwpw?o&aHQ=OvJd8HM6lOzV^t3*mR!pVj_*2t;aDHUr;{x<(}PVbvA(j4u6ia;lK$x z;_dC-S{3qB^y1cfXYkMgAbDwJKw#i~JVRPq8ag@GR;{ms4K+0pud1q?Cg{?iyN@lq zaB+&-`4?+u6>d#VO7d!ZCRFVEbJH~kNYlcf{S<@b8|bd8F=MK35ZV9y^Fqm3|2_jl zL%xG5m3XczFG3{#q>C&-i+a*d96Dv1pvtPMk&?=h<&fa9)0T<+C(RXGibeGPmDBUTy|k1Q>xA?QLWsDnT*0T=X>V_< z`KEmg-huL(HNOpZFKx_$Bz^V8fg*VxhAs~GMzi(p<`pj$5h;`)3ybEmgT-ERbMbGz z(r;xV&Vcwq87Q_k%eTDd(iq~}8?+6uiNXmTmP_&g%~FCUvgo()^2i-aKCgYHw^QO( zWhJG$y?b~_$>2)mkHI_53+uH;dqUAAfoGbUneCAi<7#Xly9#w2u)Y)LqGsLg+@n#E z85Sh+={U5!d+bh1Q$-O-h3pThYZT&;B|^-9=$FGp6@-u5mhx&jsrET8$Zq@%u$oSU zw-m{f5Bn#XCSOq3n`Cf3;C^ad2j!l4S{;Md7MzMZbG}B5cTbEPg7f@v)6avp^=oMK zZCL5fkplA90fS_bpY`B&x9)u@CYRgR zj#1K85ykV{!nJ06S6^GIzILrqa^0;l0Th6mmj{%T1UFx5yWnNmjA)`LWJ~ab)innp z7jc!*FH;T^G#IGLY&cBu4MktRe7UULPpi&x0awjfS50sIg@a0gZuEB%Ut9ad+QMQN z{7#BtK$zeB;(+I!s_+{B31ud%Fo5?*UEO%j!7Y~#A2~6{zstsyMbqQf_GKv>KwY{x z>NiD?f3%b``Gh6Dx&@Eyo8T;c7TQ^Wu!k}%6H(pQ$;L@(1(3S~#}!|#WWcKeEBHRa zC3TkY3v*n#opKu&NoK5uv_du3oI1nduG|(FX_~cP%H6Z}rUk|1zH?pyoiiX{Bvsgp zV@k@`5!2K?pz?iZi0n-AfmV?zs}DgUb551A0mX6+<2FP%SfKfr^b-=l0AdXC1(`$N z7|IkH)>CeI;sc^A;6Dy3Ej`^I#~v?*R@^w{DwsZ+phKru!@+5W{19&d zEXm;B&7DfmPB>UlofTyE4NX_$wk2le=ciD*nSXElMYud0Qh6rY3)1@s1|U3oqrHLd z5g94EN>0wQ0NzZEqnBJci_=hgbDXC~litb`IM8%#7}?N0-o3EA=GU*x)1o|PZhcAC z%z&U3tI@PTg`@-%^fF-e$$cj+CY3ym_3PocP@*ErbhU23j!Z;`B`wQkAL`g1}W6nn;5W zAEetZk1k+=-G3bm1Ch}OSlLf;;3>T&1J(m0Ub`3+)OqH#(~yOp)IX@)sRmJx1G z?wh7635ND7Ftnt}<26Z6{ccNpHox`9K~C}KRm|=4ws-mLgVDGr-|`K31>9Q;xKMD# zp`#wE(h|&ZfnPrSFgJnlFQrRuK>Ioc1}sA_>uZ2VNH^#Y4_I7lZ*MP>cXGaY^Criz zw?AFB@%{U&PSGW6k88NDWI)n~=?yi@I*QIZ&ClrBvE&N+2G0fMYT!;FSD)5i`ga8} z4svWV?HI!@#rfP!wpqGa}2^A6ws!i62){? zMNzSi`neRPJqUCjopE4I5~r}PZZ{H;>M|O;KxvOa{-W@m_QAP$&~n!uyMvsjp0COE2#ixW z%P$W;ETIM$6taBKc<`~X1#odp@6!Usu0>VB&y3)*Z$ID0iumrF(g-}NXc4b zgKgmuG&j0sd;bT~e39XTjjrZO_^ZFrtUhf{E?~x^#Ma^(6Jmh^_7f_`KLTf^cFvZn zfBePwZ^1Q}ex*G?oAl|Etn$cinxzo+@#rMXd(hW}uKGvt#Eb+8OR;=MYF_%vau1Aw zpeNp+aTnCsC~NXA2t{;CAbKDZ3?fAy&w*D3yZ?3#DuQ)X@1E(WPN1+*Lhy~GcP$lP zb(>ssTiP`=H7R))g0ixjTKR+4iFiBlb2>61f{fz+?(g57rGgmrR*mMN4+4`v<$>u0jH0tx>NP0`l*#q&2dbosQ>D^MrE^7v znm_*(3~4=aLYyot$7s!+F@e@iC;FD3&*&f5{wg&i6L@|N%?ed2n~T?Tc4rr>GF=+8 z{P<+idgGvA@nN28J55B2TYGTp-x)4^fG7)Y2H;K(RbX#RF+Rj4dFMTfOqwYQ;)q%@ zB~qKq@w(Q(4nH9V7kf|kUiehN@dd|{X6sZj7r82w-gdQXoCb0PPHcU_r82&v+ z1@C^Bd{kR#Fat+`)}mOx4KjvGY~C3k+9+S6#EW^%II{8}P9uC2E{Zk7EOVo`MZp_M>%>+vBDZZ>vu2H;?+l{FM=@@6YeBygMG<_9 zX}8pw&I0QwPbb(Bo(oR*yJ>Tt-5c}}+`$|}lhz3${0x$O33@2-DWpFDYA-Y{<#|X! z>JfR$6axbm-gIfi91CR<8vFr8Z>_9>(q3x`ku9%>zRLZD}o4n{{u8_Psc z#m*i>V>S?@VZoNXzdErF?k9TmQ=39Y_HsRQqdllUj2Qa8UW;&{z%n5OO~wzX{TxqF zGSk#8BWjFMF%oc8b{d25q7kxzpspmi$lawCbsNWy=>zZOc?o*5A5%pSfo7?wB>HYZ zB#>t?HA=)TZjIcT%;mjE4w`_l(0&8>@LES`puN|e?E<@ZEPl_O7XH?yBF0!*eY+g@YlUjdICW61qhHT!5 z?1B7Tr_A*mIhubH%@yM9vOgtz8g_oo4j!_mD++RJb8kW@uq9u{ABF4!%7W2K=JrRT zIx^kOV#TA@7^8x6@CA@U4JnBHjcA;LtA=o=DUlJi0ymxx9F_HJ;Qf&uj4wN+Ld4zv zy0=XuE4}k&j*IB@Q{&TTop>Qkp+9CtgH{nm$3SCgktvvR<7$P<1H~#ixSYYJ^}t%j z2~$xaN)rjOv$*D_`^aR4D28!vBz53?WH24#(s*v`?dTgfetsIFo#dh}i>694^M_Mp zGtViINKD*7dGuaKU2Tghp&6e%CSZG)pTRE(XKqsNFOvVvHI=+s-=FEY2`A6dazwFK znI}{dH90pK67k}|0r9YIB-{#7gcGPSHi-D<(}6boGsKs^pi$$MAu}ff<9N0(6@jg- zj5104C#mG^di}VnFYEMY*nahm+L*xM-86E_rSbBUdN+HR3|nL(BKTMoD~OA$9p|AY zF1gSB6B@JiyBkW8!jl6eCuqMuYT6$fos&Q{FlIn{G}twtIT;!bK(W=CBG3R--NERjL$_^V6r?>LFFFa=W&N*k|$mBQ$#zo}N zLPW&9zIq3^hzY-jQhQeuDln;;sKD(+T=cKT8c#B21GDI7!JTSA9l++|R{J|ug}J%O zuDKQGDzDFfDt>)R6Wnx*CHx!NdP%H@2iE@NlnUbxU}D>+aC5ARQ)7;C%IpAr zn(qm6hV@P8q=aZ=4u;skgt`553k8peKA4=t3h!4SRX784NQ%fH%t*>snWdOu%zO6v zjHCPC3#}&-3l>z5^R!aOkeWN-Hru5YS&tBGD3xCQoj5kC-abiS7@lEa?7&1$Y`*^d zJmZvQ;PIFx{#wP;EwqOCs4wj5?tVDT$J&j6y*8<#ex-l~LJ#_eEi$85riC_lZn&^Z z5mgLz@%v(Yp=PCsV{xcd*@iTW)cV)Xs!kJO&lSy3yG)l{sloIsOL9IbL5miG6WyEk zhR=*6M3o$+8?aP22h13(ctDrJc?NAHIthK7-aTkw6*tby8(w7@CQ9=4c^Ni%ZpWX# zmeA20Y3?xT;GOonJr@s?E>q-{ppa3n;^UIJByJIr>49F*uGFgw9f z^}H!n3i4qO4|b<&GDt$=-=ctFaP?51!W|6GX>+wgIkjXXw^(xkBpdz)65e4rmU}J_ zvSy?-A7_Q`Z_Gi%GVAOUmc(yF{yg?`vdq}Gj*yiIgydw@LcZZV{;-WX42)VrG#Ij@ zGu-eDzL+iT@bXU>A(&dixQ*jP*jp(sTjp5BxE2X|l-AFG2hsoNyH=SZXSnZ(==rB1 z7moOi4QE48njK!Q>sh~GG`Y!jpghO2kC)O3R8*cGRw6CPs^9-np+x9YFJROrPK;w* z5#J9VM3Z%ov>p~bcKw*+#dUZQpz&gXm8bjJiH3mrrF{^bw=FP<~AI@G;rg*jLOR+o;(Zq-|LpsA{9|eL>-@0(I zY%nUV$UUiCoJOqMU@Dm<@-`<8tsoQw6zQI&)Lqc#K|#Q0M1B7C5*5l8qhUo{k+zXHod5KUseX)pZhg z{o;OwWc(UEJCUcjI|bDW3>MzDV&Mf3*wBfSbc(o3<5==e0x5yE)YD+-nOHvl@ZnZN zSI)shhp5w*zkq#>LWu*12gmx?kLKu%%+apKIkujFC|cj)wH6C}Kz;p2WE^^OOjb~* z7KK+37y@6t)EgQb+j{sI+UNbOFuw*3ukzr-iGXsC4flENGD}ODuDRQB$Ak=kZUIK( zGT%8*uo2DJPg!S*Nn_Y@@_t*1j?{6etN#=M*^}C!eUBc|QiBOSTuhOUDbHmQdcIb? zo08b$4il1$1bZG4QgZp#tsv+>77)?7n}T@bK@J#kp&pi zE&zB);3Fg?QVV9L_!s%>;%;(FjhaUcO%bcYQ3@6e)!Jh;k)k>%^nMcQ>W!>m59NGx%TA9 ziANpB6)5e+avBko_z%T9!LU?}nq@Ev_3%L(1YwX_K^P%Qmi~uqy6jgn@H=dArd&nY z%g0~BnOopaVT=gV=YnND4>E&0j|Ug|^@eqaEA+InArYech8VtVmR+u(;!ec0YK&0d z7qx%A7FHzBH9UA^HB!Q0wT-QXsbh<+{7W~RRB8fl8d01*YA)~}uLW+ttS8ISn&{PX zoyOQahBmBQoe(u2XUN4$_vNzzi$lwfBVAZZ@mQ!DHM`P(}sOmMIWA? zbtK;Il)pQW-&K%a9_f1;ZpOfmrn&(*cgb2d*4F(A^9XSl1^0&xVIB2hTA9$%(c%QH zbc&ZvdM0DT-j1aqqmMlnK)~+A_z@zs({s~B_G24gjnPo{V=ah@Fl?w1G-}HBzr34> z0m0xuHSH|Kn5PVT_6`a#PY2^4UD;X9w?#gT;k60E4-z)@?kQ6W)8fJ7UxGCo#GX0+ z+&jp}JXPA`PyK@rx%1;uq`b^&|NFk`|MPX-KPULyZd(hqUOFR(j3xS8cIu>WvOV#C E0J^~D6951J literal 0 HcmV?d00001 diff --git a/lib/matplotlib/tests/test_inset.py b/lib/matplotlib/tests/test_inset.py index c25580214c80..906231f799e6 100644 --- a/lib/matplotlib/tests/test_inset.py +++ b/lib/matplotlib/tests/test_inset.py @@ -4,6 +4,7 @@ import matplotlib.colors as mcolors import matplotlib.pyplot as plt +import matplotlib.transforms as mtransforms from matplotlib.testing.decorators import image_comparison, check_figures_equal @@ -104,3 +105,38 @@ def test_zoom_inset_connector_styles(): # Make one visible connector a different style indicator.connectors[1].set_linestyle('dashed') indicator.connectors[1].set_color('blue') + + +@image_comparison(['zoom_inset_transform.png'], remove_text=True, style='mpl20', + tol=0.01) +def test_zoom_inset_transform(): + fig, ax = plt.subplots() + + ax_ins = ax.inset_axes([0.2, 0.2, 0.3, 0.15]) + ax_ins.set_ylim([0.3, 0.6]) + ax_ins.set_xlim([0.5, 0.9]) + + tr = mtransforms.Affine2D().rotate_deg(30) + indicator = ax.indicate_inset_zoom(ax_ins, transform=tr + ax.transData) + for conn in indicator.connectors: + conn.set_visible(True) + + +def test_zoom_inset_external_transform(): + # Smoke test that an external transform that requires an axes (i.e. + # Cartopy) will work. + class FussyDataTr: + def _as_mpl_transform(self, axes=None): + if axes is None: + raise ValueError("I am a fussy transform that requires an axes") + return axes.transData + + fig, ax = plt.subplots() + + ax_ins = ax.inset_axes([0.2, 0.2, 0.3, 0.15]) + ax_ins.set_xlim([0.7, 0.8]) + ax_ins.set_ylim([0.7, 0.8]) + + ax.indicate_inset_zoom(ax_ins, transform=FussyDataTr()) + + fig.draw_without_rendering()