From c7997bed82e43e04cc9d67a97e78bc70646004e7 Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Thu, 27 Jun 2024 18:58:16 -0400 Subject: [PATCH] Backport PR #28393: Make sticky edges only apply if the sticky edge is the most extreme limit point --- lib/matplotlib/axes/_base.py | 6 ++++++ .../test_axes/sticky_tolerance.png | Bin 0 -> 3941 bytes lib/matplotlib/tests/test_axes.py | 19 ++++++++++++++++++ 3 files changed, 25 insertions(+) create mode 100644 lib/matplotlib/tests/baseline_images/test_axes/sticky_tolerance.png diff --git a/lib/matplotlib/axes/_base.py b/lib/matplotlib/axes/_base.py index 96e497a3316b..f83999436cbb 100644 --- a/lib/matplotlib/axes/_base.py +++ b/lib/matplotlib/axes/_base.py @@ -2969,9 +2969,15 @@ def handle_single_axis( # Index of largest element < x0 + tol, if any. i0 = stickies.searchsorted(x0 + tol) - 1 x0bound = stickies[i0] if i0 != -1 else None + # Ensure the boundary acts only if the sticky is the extreme value + if x0bound is not None and x0bound > x0: + x0bound = None # Index of smallest element > x1 - tol, if any. i1 = stickies.searchsorted(x1 - tol) x1bound = stickies[i1] if i1 != len(stickies) else None + # Ensure the boundary acts only if the sticky is the extreme value + if x1bound is not None and x1bound < x1: + x1bound = None # Add the margin in figure space and then transform back, to handle # non-linear scales. diff --git a/lib/matplotlib/tests/baseline_images/test_axes/sticky_tolerance.png b/lib/matplotlib/tests/baseline_images/test_axes/sticky_tolerance.png new file mode 100644 index 0000000000000000000000000000000000000000..a3fb13d0716aed8de5596a838828e103d7b23d5d GIT binary patch literal 3941 zcmd^?Yfw{X8pq#+G@?b&I#o(BI3jfwxf2@-0W7v44B*0c!GwDWS4kp-01-&oZNV*< z>^dwgh6R}&p=y&N8W2M+6*Wpk>Sj%(5E9BIg-8g5G$0A=LEEm~wS3W;b!R`EIWzB^ z_ni0nKhN{~Kj#leBZ4n=kKJ=Ty z#u>#SqNDuH^83N>i!9)$2)$m12&u5aVC2YA%(Uzjzs0J9c|b&lH4c8azb0#Un(9yd341y}2||J3A}M;$~s3Z}^~?6J$(nMMXtNf>JwhS?^b0)D-z;b91xA zO=yY|ENgvv7Iv|H+NXdhUQNb)yUf0`p`X~EO0aM>yl0r=`UDK%}^#muXPX1>AFqtvtzq}d8otv)aWuyh14aNRNxFx=r=z^*Fr zB1?I48UP8#u{H-B6Z8Z{toLev)_4Hm`Yqyx5B)@dVJ-@&_$+nzU41bP8y?-8 z2^s-BPC@K)j+g(HBbdcA5ua>hfS67NQG%&y%eF0-Il@N$;K-{Txa{-XPLze}#>Q8# zyPnkgU47hSkw3qw_57$e0Q9PDBCkhO-rw^TQ`5@=LkIxr+ZgE&iCqMHu@r3;r1=v7 z_a?XM-pXR1lYK+80*p$`i&x73sKQ#D4FIzvVvYgf<6pzx8;jVx9yJ{-^2&>vBz^;J za;Z1E5eZbxt&p}e)QPF7^9I{1O-Ihm)ZJ7FIwcei2(!vTf`<>eo^ zFgDj<3&4&O@Rx(>wE%P@{m+&Fe2Z$D%8M_e(Xy~emlAt?Bv`%an8a`%dZq>#WT<^P zU&wG-Y_=F+o_8D}BDZX8E;e+oA>r4PA8R(|7Js!oJ;685C&X>yS$u<=))t1rb?}Pb zmfEOLrLlT%S;2SF#+&p7h_jsK`2gh^1*|JMlQ-tVuDP>xvPG>{cPM8iW^>6g_HWtZ zqCBbhp9QlLcPql>!7C{B{^Dv0)ej{ZCI8CC#)iO8xTnl08sLp#=|a8^?W&9_5aV;< zg=Gd>Jj%fV&peUO>Yt2vWvq^8$8nri7Mj|9M>NJE`aIfo=nd%EzPky4k@S>$;~#Nl z^P{~L1!iIUJo@@j=whiJJ&#&++5&-bU5>ptHGhe~P{$0C!K|CsL<~A z6B}At_<5?_n8bsuYA5T>E;Ak%eoPL*e-Q~R-}z6Nk99H1^d*mQk-CdZ4{7k*RA-** zrudQpQ91gOu>6vI>0b&Lus6h>ezrklp-R1qj(Flcq4NB;i?hoR*k4a709_w~rk{1_ zc99kktAj;9+7IK?OTG;J*ee+78f#re#P{#)T1T3+ zd_NSET@m})sxi7)X@rcUWAM0L1hSzubAP;CVLJJ>mNC>(t2hx3VXox|hHSs}RKInP zpnuc6M52?h*Xc`hQX6(KBZI!AV|H-pS=jP;PzIUuD>=7Latt8Mb0Duly|h3((^@VC zVaZSl-P)*n3nJ~*H7&(ZqNMFff<3ZU$t*=)$Ge6+YsRMR%3BN}BKX6dBKDl+q7_#b zm7Rk{w!2d|kh5RGQ2)Y{S?qb57eKrn(7b{>$O_kZFam#xkc%#=*CAjd>Nk>3}3i5)eP-q~Y+w;enHDA!+m~%HvSC-UKpDAE$mz;v0a}PXx z=xz%pQ{4B5}UkFyCYznA7K!iRhD6lY~(SD(2^Q9r_Rg0|H*@PC@JZ7;}h{>6(&A(ss9_R;pw z=Fwf%D8W7cQi*mzGtAQeS1shF^Yb}ww+inL6?=JNOwQ0xEjaQ)#9_|+Nx%Ci*GT0M literal 0 HcmV?d00001 diff --git a/lib/matplotlib/tests/test_axes.py b/lib/matplotlib/tests/test_axes.py index 0ed5a11c1398..ff4d698fbb6e 100644 --- a/lib/matplotlib/tests/test_axes.py +++ b/lib/matplotlib/tests/test_axes.py @@ -682,6 +682,25 @@ def test_sticky_shared_axes(fig_test, fig_ref): ax0.pcolormesh(Z) +@image_comparison(['sticky_tolerance.png'], remove_text=True, style="mpl20") +def test_sticky_tolerance(): + fig, axs = plt.subplots(2, 2) + + width = .1 + + axs.flat[0].bar(x=0, height=width, bottom=20000.6) + axs.flat[0].bar(x=1, height=width, bottom=20000.1) + + axs.flat[1].bar(x=0, height=-width, bottom=20000.6) + axs.flat[1].bar(x=1, height=-width, bottom=20000.1) + + axs.flat[2].barh(y=0, width=-width, left=-20000.6) + axs.flat[2].barh(y=1, width=-width, left=-20000.1) + + axs.flat[3].barh(y=0, width=width, left=-20000.6) + axs.flat[3].barh(y=1, width=width, left=-20000.1) + + def test_nargs_stem(): with pytest.raises(TypeError, match='0 were given'): # stem() takes 1-3 arguments. pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy