From 33c7c2d773c63ac29bef768b804016dede4dafd2 Mon Sep 17 00:00:00 2001 From: Rob Righter Date: Fri, 24 Feb 2023 21:47:31 -0500 Subject: [PATCH] Fix axes vlines and hlines using wrong coordinates --- lib/matplotlib/axes/_axes.py | 46 +++++++++++++----- .../vlines_hlines_blended_transform.png | Bin 0 -> 18624 bytes lib/matplotlib/tests/test_axes.py | 14 ++++++ 3 files changed, 48 insertions(+), 12 deletions(-) create mode 100644 lib/matplotlib/tests/baseline_images/test_axes/vlines_hlines_blended_transform.png diff --git a/lib/matplotlib/axes/_axes.py b/lib/matplotlib/axes/_axes.py index 0704d78561cd..3ce614c1e17a 100644 --- a/lib/matplotlib/axes/_axes.py +++ b/lib/matplotlib/axes/_axes.py @@ -1101,14 +1101,25 @@ def hlines(self, y, xmin, xmax, colors=None, linestyles='solid', # Extreme values of xmin/xmax/y. Using masked_verts here handles # the case of y being a masked *object* array (as can be generated # e.g. by errorbar()), which would make nanmin/nanmax stumble. - minx = np.nanmin(masked_verts[..., 0]) - maxx = np.nanmax(masked_verts[..., 0]) - miny = np.nanmin(masked_verts[..., 1]) - maxy = np.nanmax(masked_verts[..., 1]) + updatex = True + updatey = True + if self.name == "rectilinear": + datalim = lines.get_datalim(self.transData) + t = lines.get_transform() + updatex, updatey = t.contains_branch_seperately(self.transData) + minx = np.nanmin(datalim.xmin) + maxx = np.nanmax(datalim.xmax) + miny = np.nanmin(datalim.ymin) + maxy = np.nanmax(datalim.ymax) + else: + minx = np.nanmin(masked_verts[..., 0]) + maxx = np.nanmax(masked_verts[..., 0]) + miny = np.nanmin(masked_verts[..., 1]) + maxy = np.nanmax(masked_verts[..., 1]) + corners = (minx, miny), (maxx, maxy) - self.update_datalim(corners) + self.update_datalim(corners, updatex, updatey) self._request_autoscale_view() - return lines @_preprocess_data(replace_names=["x", "ymin", "ymax", "colors"], @@ -1181,14 +1192,25 @@ def vlines(self, x, ymin, ymax, colors=None, linestyles='solid', # Extreme values of x/ymin/ymax. Using masked_verts here handles # the case of x being a masked *object* array (as can be generated # e.g. by errorbar()), which would make nanmin/nanmax stumble. - minx = np.nanmin(masked_verts[..., 0]) - maxx = np.nanmax(masked_verts[..., 0]) - miny = np.nanmin(masked_verts[..., 1]) - maxy = np.nanmax(masked_verts[..., 1]) + updatex = True + updatey = True + if self.name == "rectilinear": + datalim = lines.get_datalim(self.transData) + t = lines.get_transform() + updatex, updatey = t.contains_branch_seperately(self.transData) + minx = np.nanmin(datalim.xmin) + maxx = np.nanmax(datalim.xmax) + miny = np.nanmin(datalim.ymin) + maxy = np.nanmax(datalim.ymax) + else: + minx = np.nanmin(masked_verts[..., 0]) + maxx = np.nanmax(masked_verts[..., 0]) + miny = np.nanmin(masked_verts[..., 1]) + maxy = np.nanmax(masked_verts[..., 1]) + corners = (minx, miny), (maxx, maxy) - self.update_datalim(corners) + self.update_datalim(corners, updatex, updatey) self._request_autoscale_view() - return lines @_preprocess_data(replace_names=["positions", "lineoffsets", diff --git a/lib/matplotlib/tests/baseline_images/test_axes/vlines_hlines_blended_transform.png b/lib/matplotlib/tests/baseline_images/test_axes/vlines_hlines_blended_transform.png new file mode 100644 index 0000000000000000000000000000000000000000..bcaee389dffe5f06af1ff6995d9fa5e0477d5bdc GIT binary patch literal 18624 zcmeIa2UL?;+cp|?#741FRA3YkMT&H!T0ulWIsyR|=>k$h3C$6aQJMq+DWOXX5R~3k z1XQFGB3-2u>7loCKR7zh%=?}H`_EeEKi_)K>%xE;@|6ATecxBx^YE&Q0^QDoJ5eYU zo#Len>L}D^UF7d}8hEGN^l2A-({{Y5>!@LC>gasK-UOw5!|~2-TgTfLH-B|9v3Ibr zwGrl*;6KHG%fw0IwBSiI6R}gbj7@|EZwd3?5;`R$d`d*{H1DtGj*fR6Bn1Sle|(zX z*4|8DIzg-z&amUorE3l-6vGYV@1|6_6blsU(r(2IXEj}-$GY7dHD}A#*U7Yxj~Lho zU*der#r1}UY46Elo_kEAr?uk6OuutDrB($Dgwb>M%L$WuVQ_ z(aiXUBW3r_-=Fss{!aTa-sk>H&ijua@80{t-P7y3{Q151pL5LSRAPeiO!>@=dY8ux z3}a=YSYrjNx5KryEf}NW+ZmnnFE^u5+5UI8qEOdaHtj;8UJ7kyM4|4Q{K5>f{ z8!Bv1HoWq3T;GI3>B|4-1OFe461KV+McnRN$#dd_+WOk+z|7)JG(8FxbHl%Bq$MRZ zEbLfCg*PqZ#?$$<;xMYH4aFog|hDwV7P-p=@r86t$wh<-g(jqFr0~ed zpm9$^L!Z41;kKF`C5_P|lYNZDmnG6!;%u9fa|5oUBgagYKxrkB(%^F6!2rd{6uZ9^ zsvhot7jjue#YRZx^yzB@0|S{^1?EjhxsDx^XEXQ&Po{%VyNx%tfg8SzuY`OAnr@rKKf-^2_Gm-fkVUDa-C=PUIqPn^m*O3oB*2&3Lr4gf`NOU`x$& zaH*5@E{Cr#>W+SQMQyqYO_{2O1_m$-hPpO6WuNZPG3s2#!HcEauEdl%Uhlz<(L)|% zhYfS;^Q_GBCUX5}Q3~zSDDBcCrGetRdB!#LaK4dZN>&J`%)%${_wU~~ zf2s20Qaq`haaCJ8Y;CM}O&LcW5b(MNfAlImJ#HPcEuDIB@74AGMVJxPkH$eGbDg$2 zmoGm`R>7x7M;}&>mJocTV5-xXdSd0>vc&DkpqP%Fe-2p@|MhOqoiJOPA?{f(Oi;^eKLc+D!a&E{GqvS8>Z#$6PsDHT^-HZwp=6PMLyI# z@9)q3HRI;6npW}qTK4JrB-C|($FHr|BK+>(uQnMy^m-@t>t}=KY%R#gzShwF251Ow9Z7d)0#b3|RKRjnqZyuFX2s9H z*!Jfyik2U#jCFtTAVApmgZWqu-^QpqB-nlUMTcfxWE@Ux{Mw=fNel@E>yYu?KO|>Qmdmqah)y{Z? z^*n9r2-4puGeZ|BPj_U+-n@#6f+lmfZU2D-C-(0=!NGA}QBhHOkVGb1)rRqeEGr~H9*0kp??U9J>MQioZxVDobgGp*j;+HqzK zObwj6#Mrj!$$!~r1o-$!d<9(zk&y@K4vAe^pIBd& z<1;EZnD6!SB6J#*IAsnt#1a=47T)G2C2<~LVv=$?j6X2ke%{OV&OMd3)`H>>cRlUG zSGe|Ot`=_fz|eSLR73(JK6M=S-u&^4Fuznvxx91Z5IWD(c&jip4wgF>|C6cp3Va`A8MfbjvYJjJ@lwT z#dm2PV&}W!-YjSjxvAv_7D>(Ji*`>*wPMV&k6n5Ct73XqmW|j%SCIpDAXEoB-ix>G zsU;KT`f@9u8S-qpC09Rfll$E=6ZHvWp*VF}X_U=qIv@e_q5FBk0y0ol`xzP2larI* zQYVsWt~w7`ooI$Bz2 z`&H;*Zj-GQM|lMV!a2FPxy2)5pg2a5asBaV+p-Jiqtc22jlWPGmlJ;}v&(bd&8*aCyWVAogYF{`uW0yn8@ zW~4)TEYD#QuAoqjbx^@ct*ytIX?f)2jG7nyTD)JyLI3EVU&c(7&08)`55VO8-Cq#< z#^w-=Za-KJ*#BWg9kKt3A=Mp+_M4UL}ozmzwSrzJlgf# z*mu0JFYxWmHg@-`I1#Tk_ksR?^Utq+c#a>x3b<=&Zj4Y^C{eaDU8~IR?$s9{-df?c z{&t2$(4mwskB2l2g$T-9SXk(lVe@Q?N0NtGnE|qh88|04%^~>i;zb|%z{6>Ug@t0_ z0s;c$=f*WpqN6i%b93p}E$)rGgovO}w}%6Jh>OqI^KJLxYU- zH$*$ynieVT`ohqC>Y~Spl2P;5_8b#`yU9x(`8l8N+bj?C=H`65aD`&dAVAuQI+Fpj z4=GhhnHcXb(T`pqP7LDNy&a~buLKW(ho%IHc^&Ru{KLwTJBxX z>Rn%(U#etZ`_!nGTlX`@^LPDN!Yn}IaTTD&rWsmdX!0bz_4X(MSlf5(O5=wJVf~f% z?{$Uxatp(8Sy@Az<9xUCNr0%7woEHblodIP)S9LN@R?r`fm8ru^RTm)X7mZH`ApG` zJzp*>Hp7dx^HkJ(r93R(&nL3VDx)EA`S|#xr=_VmIXT^mY#3^JDrlT*))1pj2Ec7WEBD~alRjQ}y2T{V^PV35 zZ07Hxs#`Orr|lKh?d|PDM&7-97wpRP4U@C#Dd0v&M>TbHm|P9Dv@mOO&CQY;*nP5! z0tF&{+rmpND5aVNPUR<#pK|ua1gaew>wkuoQ6mTnRhy3tdQUI!XW7r&?S54};EG*$ z++E~sceapMFSrPLt}ogPNPAfNKm1Vg7}jvZ5T#KPm-`*{pMOAG^k#I^h4X#wcPF`R z7qjgqR6AQoX)S#Yxs1|kTUw@bUbN|LJidP?nyO8gmX@~D=bUmf6u!4}dM~cO+AK5u zmLqrw2-VPeZN-OA9yhk1Zw$OARJXd`V~ts}t?CbKp%7h`T-WGXo~R%~ zRnIT(fl~V&(N^v;)D;-!~NTTiEJ3|6t~AKD6kk){qR+ihlVr5vTjfplZ?Ld zw%r%3yt$Sc9R$iA#X%4gQ)e8)WU zF)b(EcDq7eR+vj#TeaGCtJ4kh@5~$d)`e=6X4MJ8sU()xo#J-gEE%j)PQ!sxF$m9{5 z+gCw^D2(=2RHPFKp&=oO5BG7)PrT&Zik)jTVvCLo5uMHC7mhQE-Yg?9W^|(C(=$D( zy)fRA6C-NDU!l)VQSl*gb`ii+RaI4aR(OpRm9*5UL(E)UH_~ny&d1S`?~yk19<@k;9PX zo8R|z6xtKBaWciOa6tWhc~zkYnqm(`M}z@Vk0qfi8jV{P;g*7mUhGkHuP2S~O8F|_v zxjy=IB2Z{O1{vyO8v4V-jzs{54o!ElWW0HE0j8(<>e6hm#Wn`E*0t4TEm*@}B&VjP zBE_sDvx)`}nwXhULUjz)fGr0eKHWU(iIhbxEmA+Ic#Ukb#{Lg6dst^j2}H||T#MqV z>O+XA0c(-GSq046<#_(&P{J{OL5!$Km-(Lp3 z#b8qMP`zaurS~>0W^lBwY1O| zl;=8QIy>I2kAp79R<=A|5uuy+!2C;7L0%atG1$upCCQ+VR{}BTyQq_( z^z}RY8O{WDT;MW&)L9Xz)KxpX=j!U}BIb>8V&QTgOSz98J=)LCP6SYrt`Nk=+F|5e zdWOj1FSyiU+k?`zMKnYiZQ6J$n5!&OqXe#VxmgoP&QeBmX-eju`oTg};An z;^_7GmV*k?nX6m vG&7JFGq>@;uq|?+kc|E(r{I~nSSTWa2ripOC78g=XdCiwXzx= zMxj17!oLXCgfLSEx1c_4{e|~J06Zu|hS9`kOFmbbfjZRd24^J8WIkq%$;m?Gry7 z&ga{6?{!`)+Ia4#rfF=gWc3v8VC3DFWMPqQqd(jTQZ%MPW`4NcES4ln zHb{i^GnznIS*Vd~`}o{A?`GA`)#Zxy5}UGFZTxA6W0wy&+cK3uKO|cIs`B&X#i5x^ zjgt2W!W}K**iJi`Chm-dLEKx~fKnsG^}zo9<~4z=P}D*^r$b_g@y_XA>_{eKRc-p zk&8z7O0(aj5bD9IrLRvw1az;pA+J^_6pGDBiXn)ItVPhafF@Aab`4YsME>r^QZjK# zwfrSl=DQq%w26k9KD(HlGVX4mVkH@Wn@Z+HGqJDQu?}XW4mX!7$}(xF?*Ze`vU{`e zAty@mgu9w-EOBvj_s2iLapUXKd*{t&JIQls$F+JHUs1dM0hMqTw8ygH^f6gC{ChJr z^FpWI;NS=TwoauBMtIQp4sCm$S(ierpEP)xP9*ApWM^Pt5HezCXNLtYtY=_0(Nl)# z9zuLj<>i*!8#K}AOwZLNQT>#xEEV9{-yrEa2j5sTeO%O(BDTHyf#-E&4s`7W#cllg zFI$>dtv^iI^V@OuxEy;qWaSE~#NTwv{WM!+L0kiY6Gx5eI=6IiOU&}aQ-XqOEG#S= z%5BFh?`?Tr>z<+E;RS^%uC7J6kdUY=R_>nD{qGpb*K*B+_wL)r5d;leS8_AT29cIP zWYMlj^$!ljOA-=8tpzlCcROWW4T}GE8pr%lqwSnaqnr)+SGXjT+As^44Tv#<#TJX* z{utNbG42o?ODh2EU%!<7QeSBpqE7@#PhaYHg$}v+SWEpV7pJb|-nf}Sd^+i!@N8zi z?RH;MVko(QlWzD>%E`Tb_~Ugsn`PXF1sGHs-$k}9OG2&jSBt9s1#5reEC(oWbJV%M zJGwFgbJxxov3`DcSJZX-)>vnO>LGC(pkOJv7A?p43<|SJ**{7AxZVjs>zDmN<=?b* zGoL|Oa{)1wB7Ij$G}YFK?h$4W`l_CKX)~^aK4$D1O>6?(uC47JG%PFJ_omsr7>jan zZ~#2o^5sQebwEooh7x(DwzjqfS!v*%NTGQ^ZZMU0rVHalt_K*MrMdZ4PtS7G4^QLa zQCPKQT*D;+L^1$C9K;JNG4uY@+ zO4@L@b8i5z9N^nBYO@j+By`d1FHs(!cNsN$t<-oSe$8DD_v%DvX2MUM@#=Ech0_j$ z{yTT=!c-m58J@0{a%u?rNp3Ufr$?PB!GOTrVCWqh9o_Y{ZI?B8VL|diY-3k1g2XiB zI?atJ&*C#*Su)J6R=7m%6`TR9@CWqb*~)m*G`8!GIf6o__$6>0ZloD8(w;tLrU)gx z&S5H2(1*nW*nDYz!gg#zRJ4b+JT*17(}2oE_q{Vgb7H}d5Cr8@RAaUE^z;bgTPG|f zyh$pa6-GLSuFp6+RW4onR5yWI8a<5t=5CDo2hQb{L>F1M%G~4x8EyY}Yqbj0u13Hs zJ=5%=@+nZBH#+Ku6GWc-d=#!5RV#r=I^SJdn-N+|pz>W~x4~R$$Xo9Ypdg@U7#CzQ}YJ%9wP^Uv9B3LLm zX@soAU%dp28D_4f5V5@6P(S}RqGH(;ex?av7Cb6;u{ii_tIXO$U-iU%6kuz4Hjr2z zVXmR8JMyfQD?C>}9MCbiQSHxS42;hh>?3B%i(-F3{Gshcn+S4x~Gw69%@s19Ohr!*J)gVr$&D7p>E^i8-h-pyC<1#1Q2K0`t>IFP6tTd)c=00Fl9bM@GsODe6PNs)(y}hRd=wlcyL8EDbyP>x zxSCdGmD&Q-*bk$KK4)W-Wm7c3xVkbVM~04^23%?sNI)Pm31EB_pwG+qF0~chL|+a+ z<+0>w-BqZzb?a7K5|k(_7>%Vt@d}o{_obOIy*}TO*lTbI*z!o(e2<@+7Fy}Xjd(Ce zpWyMV5rZ>}BEb8`+H<&_e2TVjI!VJ{v0~rtI)smuuuI4)oxUtH^=4n>sT=p|@ls4M zb@&d`pWMH51i>Qk4u*_&9swkAP|mY7-@22LGF^Nhp0GKzqGAwqjp6bpW7ijBfjK-t zxB?i(8>%2^7orx;NxI>K77rgjeE;@sF<4p%~TxkJ3r0|ln_VD2c_^z!OKi92!S3snMQ zuHLHA5^4bAe!pRYu0)KG)>h5(1wO%QL;+uF3i3=s%nYN2*Bd%#-BZEys;QXbC z&E8w?5eec64Fg+-a+DZ|vmtH;*Km=MJc=7~m@mj-rQ?CZy8Mlejd6W7K?G1>p7U4D zWL2zTK`9cAfI6EFwT)S;Rg~G7`o&LRRKIsA3_I6vT=@VLdoVggONdw1)p0(iteA{p@j+VpJ$>@YnAz()^&mlGd< zc5!hLnNP^5fRT=riB!;7PcdskQ|252v)8VGX$@S3+uGt#K<`A5dwq}lOx+;3{zyHA+s=Ed zEHAhGRL-khu=*)z91gH*A`Hv05#YiJLwT9;TA%k4%<7O?&^RrquC1L6j}mcjylDW$ zoJQ9}t3^hM4xR#3WIxR5mlxsbra`v>8CC7vxpNt{BSHY!Gz|OCv1Y#SQDE27SB(1T(3J6ZQxgv|J-F;nwR$H{e<2o1r zSV%|+CTi=g7(sa$Wl7BF6F?@JXMSzWvK|LX$d{f~-PAN0CiW6NNkd&d0pP8pIV&77 zEg|73+I1lGIX?%F0aG@hu|x$n*9%}$;F4x3WD3P-9eZo-wa>0uYKtl%J^eCH^Xk<& ze}8{Jn;e)-Eh(yGWEOT~$Rn8rJ2>;F6g0=Ag4i++qCLJ3ZP+Kk{lL$vJmMR!^FVlj@qB3^AkjeW%blMmVQ%;|mo zy?w=F;a)B9Jv{gCVUUCzi2C4?pumAlf2;+bsk(-SKAL;?_6z*x&J>@qYG$C|sX>HDv8~*>1%>K3 zF@lZ14;P8YBk0IhH|q`-`*VRO3zDqjgAbYVs{ z5sws*m726r$w39>&#FB&H(K1Otug-`viF!x6o~GG3nsU7aC0l*sNU==aaD^sW(|S2 z`x1j>E$wNPaGpyou{@Ad5Es{hg@FY+pXjQqjh3*qq_%&*C+O@gWR*{U1dDba0*6(N zn~RG}bh+e#A+^1CMUL{iNkhN3E84ZFFAu8>nU)D_2-58P5u|xwb0E9;UbR|C19zUt z8OY&8lf9?kIX9Vv*~q3w$tOD!Ek09}xOd6DN zl5tA?djn2R5q==5NG@XN(d<*?V`g$TaX)`-fmUvRff6iBsMT5kZD-tWhDHMejaQd^3qIC@o%@;ws&uWEQSm>u(tjjzsClOibF!<<3>ag{|FXS!0@Ok9Is_@qKW5(m zDXSpYebK(#Ykf7-#-aU%NhI|CFMWL+Es!#WF5NX=3`W(Hr%zMAxdM(WFD2vpH8YV6 zj-=O_3JJQ){y1M!jZ{SRa zgg`|AVl#TpNjZ;48@di0kePhBB{)Y74qgCK6NGMx&BGxq-guOZe^vYx%mlb?k<&Sl zvi*Zf3?)$5AY;4=NW0A|s)jpO{ypypFl zQEAgDpFR-4E@uc-wGj}zC@@%HKFK5uBcEQTOX8ozyf#EBkOtD`Hpw;P^wDSt2X zJ_zUlG_3{gyM@bg`n2!&l+z#}njE(jXGkZ}m)&W-jJa#lJcz>s|=88Vq5k2yLMM z2FF05(KZHft*@2i$uVH$5}Mg|Cp1ff#5;#ubn~=6l?T zVFE^3914MNnG?BVT+YFpfJlOF8v~BP4n~+AZSa~e=|uv_pgJ{zWlEi_WFW-F#l4e+ z)}CKD&ixu%&wt;ReLerfmNkMv4KhnMI{uTeuw(>nCr8;l>iKOGm_?NsXM0;B4!0K~ z&gQUafD>CeEW%SlNIhf-U@e6Z^W=7u9*w&&>HYsWWAj~;LgM}i?9EO7Ur9U(=+3S@ zt8hf~`0(Kh+G}-|UXu>uN3Vr-K}}SH@B@e~>41YQK!j2r3=a$A0lgV!SVfH6_-Q2a z4R%1+#e#NVeV~n60^7z;RWZ#z6Yx-kz8@x7{ffh)^Cz$-n3*V(N;++r9*!h5>f^NE z;Qow|kM)$5R4sxMk-GV}yD&@hZF{qr3|-D5`WA2qz3##Hp(hb%56G0;62R&7iuKir zB}mK>kq{m|>&4EW)1R-N`j+{{YY(~n8M?9heZ6D6dxlN>mJhgyWQovM{-w5& zLYf5--g%2v5!CzgVM$Qxq5fJ_KOwc=H4y?RW%#|?t~|+~gAbFMF99w8 zoc(h?0vskrx;-AlY4KCg&;B9FE8Q-4?^^%rKCyAuysHFzBV4Uu8vqZiG`H1%pdM((Tye`yYL< zvMvkE+PD3eC$K}H|3;-xVyL{$;lG`A7X*L)MG{Z|YeYa$_B90@BwZ3b1v09e9yO4s z-DCaa`C3O03y_qMNn!>mlsA}71kgGGHUsO%C4prMf%gB6>NWHsA`vPm4**Xb6$BFG z2Zy2hfYIlqjl{KfW|`49Ut;OO9Zibmj=zrn6iawj-}-9rI*HY}tLgUA%Hj+X9f3(c zD!0}rmwTgn|$mpsl#}xJxWK22xa0=g3uKe>T5Tx3d=x6r=%Kuy7&?(blwDkm%hlQrk zy2jr1r$vfhF4*3QgQAM$5Hmx7*?yfk2z~0~VDSbKFAW6R_d}ijciTgRM5F5w12oFE zJPpJQE3o=t1I=wrJ2W>61P^ zA}43|{YfH1AQb`+TVUk;82KQ@bhBUZ*4y2b8kjc4$6zPgo8sR=awh4BT6c(a19^nN z0vSXIkWG>R`+-_94_IkH%(sA3P^9r7B6^MbgYt^kQN_qTr2L|ie-hZWMt2o2e2<_H1g!W*`aMV zPa1}1zJBLMkg}+xc#J{p7)F6h5%AJM8LVT;>rl?wiC!Z>?O?8AeJc-imoGf*MSc*rZ*H0LFT4gXs`scagv?+6C?Wh4mHL+W z*tcm{c>h00*v2`W_hjEu{09U3_A#bSyYLWVu^3~2y1*OYp73MCMtlKme(I5bc`oHg zB_H};$+NkCFqdzk6lpj140B50{G@r%&s$_fjtlk(f9J4p8~$0%%HoIfV%&CyDEqEEG_HTKl8>;taw$jVRxa%{!eVgJf}IvD-qx6xhM|bo6;7| zSv>v{3z`4*`Vq^Yu@dZ*krZL)OCO>S)DP}!ISII^<4x@tl;QC|MG1txOtc+n7>%<|Wq;=xEOYO97S+7S=7R1H+x z3}jaWqGyw#V5dWsypZ-~eC&0wMq>3IO^L(h!|w9B8#hcKRzG#(^G^Pj!QuWhFbMks z8UtCS5XXPDpIfd;YNE8|%QWm{z>cP+P(frxiu)4KpjlYn=as^EAKDLexA<_R$Omww zuJ>rWG%fmP>&YA8o3xDzn4-XKMafNlb1NF{_2~q{Zq>H7a;5kMkcRHp{?0BxaV2&5fCxbk;U@s(#BP8Oj)= z&nUpA8Xnk!L?IK&Iu%P=ip_sSL?HE;yActo4mbq4WqbP&u|&x)s)pSXclG#LjdcQ{yq?V&XB+cs8S*0b}tu>Hi`qy^pZrUBSnm0LihmK*;$ z8~*UWkoc$yUh)~7!2&F^%m>eY5}3j50}ifd02=f0-P?7E;0HK*{6C6!uxtb)Wj&V6 z7bZW0#osz#J}*PZCas%eT8HCA%y=-l+dzZhLKs#Xj!TK!<Cdl68oNgNS#w!?zNS4e~|s8vqe((k_$3 z{fVimZ?*T|k%<-T@ectI%EQmE4cT=Xx`VA*7$gh}$_(1B>HuQIO669-WCSvgbf0p+ z?mJ0a4hlpIK*k3^L8vt(10N!>K;$b?7;;?0;E^HwWM;7=S=AwOdoB;z<}|txeC9^K zMMk>QRu@-25!(f?SHK6s&eBEJGe-E0+#|Asv#F{4*s)`hx&h0MLCiZ)sNEO8@2nAo z%sdsMq7D^&weYYv`p?F0NULR+xsBjP!57+}w$w|zMbV&|rl432!&Z{IWCrF_XTS#$ zOx=#^3WEGWTvE~n5UG`uL7h?QP25$7$Q3}FCEeySvWiD}&|tr{+3fD@1~h>M&r0)kpJ&D z`@KoNB>w0#y1yh7;7QlQs%Hz>mT!&0A$rbFsMUq2+X$H$TlD48NeGe{Ux}6V_y8-@ z7_A*X1vV#4hzYNCw+yAJ(v=l=VbGq0Aq*@G6)Ge;`gV07s}-`#6dgH)#PLiaT5Sp! zZ2J2Cj$^yGKjn^fhfV0N??*|5Iw;Z{UW5Pk>5Y-eSgmul|H*FrC%f^V?8bkx8~@2} i{M-L8Xuhs*tD&`eQh7-KGcZDw;zgAUS?8|b`@aAb-clR@ literal 0 HcmV?d00001 diff --git a/lib/matplotlib/tests/test_axes.py b/lib/matplotlib/tests/test_axes.py index 863e3e2f86a6..4c090eeec0a0 100644 --- a/lib/matplotlib/tests/test_axes.py +++ b/lib/matplotlib/tests/test_axes.py @@ -4920,6 +4920,20 @@ def test_lines_with_colors(fig_test, fig_ref, data): colors=expect_color, linewidth=5) +@image_comparison(['vlines_hlines_blended_transform'], + extensions=['png'], style='mpl20') +def test_vlines_hlines_blended_transform(): + t = np.arange(5.0, 10.0, 0.1) + s = np.exp(-t) + np.sin(2 * np.pi * t) + 10 + fig, (hax, vax) = plt.subplots(2, 1, figsize=(6, 6)) + hax.plot(t, s, '^') + hax.hlines([10, 9], xmin=0, xmax=0.5, + transform=hax.get_yaxis_transform(), colors='r') + vax.plot(t, s, '^') + vax.vlines([6, 7], ymin=0, ymax=0.15, transform=vax.get_xaxis_transform(), + colors='r') + + @image_comparison(['step_linestyle', 'step_linestyle'], remove_text=True, tol=0.2) def test_step_linestyle():