From 2def1850ccc697dce1505b3ee2d3b15747a8bb78 Mon Sep 17 00:00:00 2001 From: Date: Fri, 16 Mar 2018 01:19:57 -0400 Subject: [PATCH 1/3] fix scatter not showing points w/ valid x/y invalid color #4354 and added test --- lib/matplotlib/axes/_axes.py | 24 +++++++++++++----- .../test_axes/scatter_invalid_color.png | Bin 0 -> 21260 bytes lib/matplotlib/tests/test_axes.py | 12 +++++++++ 3 files changed, 29 insertions(+), 7 deletions(-) create mode 100644 lib/matplotlib/tests/baseline_images/test_axes/scatter_invalid_color.png diff --git a/lib/matplotlib/axes/_axes.py b/lib/matplotlib/axes/_axes.py index 74c28306c3a7..f3abcb411a45 100644 --- a/lib/matplotlib/axes/_axes.py +++ b/lib/matplotlib/axes/_axes.py @@ -4073,7 +4073,7 @@ def dopatch(xs, ys, **kwargs): label_namer="y") def scatter(self, x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, - verts=None, edgecolors=None, + verts=None, edgecolors=None, masked=False, **kwargs): """ A scatter plot of *y* vs *x* with varying marker size and/or color. @@ -4145,6 +4145,10 @@ def scatter(self, x, y, s=None, c=None, marker=None, cmap=None, norm=None, For non-filled markers, the *edgecolors* kwarg is ignored and forced to 'face' internally. + masked : boolean, optional, default: False + Set to plot valid points with invalid color, in conjunction with + `~matplotlib.colors.Colormap.set_bad`. + Returns ------- paths : `~matplotlib.collections.PathCollection` @@ -4268,11 +4272,12 @@ def scatter(self, x, y, s=None, c=None, marker=None, cmap=None, norm=None, else: colors = None # use cmap, norm after collection is created - # `delete_masked_points` only modifies arguments of the same length as - # `x`. - x, y, s, c, colors, edgecolors, linewidths =\ - cbook.delete_masked_points( - x, y, s, c, colors, edgecolors, linewidths) + if masked is False: + # `delete_masked_points` only modifies arguments of the same length + # as `x`. + x, y, s, c, colors, edgecolors, linewidths =\ + cbook.delete_masked_points( + x, y, s, c, colors, edgecolors, linewidths) scales = s # Renamed for readability below. @@ -4314,7 +4319,12 @@ def scatter(self, x, y, s=None, c=None, marker=None, cmap=None, norm=None, if norm is not None and not isinstance(norm, mcolors.Normalize): raise ValueError( "'norm' must be an instance of 'mcolors.Normalize'") - collection.set_array(np.asarray(c)) + + if masked is False: + collection.set_array(c) + else: + collection.set_array(ma.masked_invalid(c)) + collection.set_cmap(cmap) collection.set_norm(norm) diff --git a/lib/matplotlib/tests/baseline_images/test_axes/scatter_invalid_color.png b/lib/matplotlib/tests/baseline_images/test_axes/scatter_invalid_color.png new file mode 100644 index 0000000000000000000000000000000000000000..8f68dec058176aabedb5ef329665448328f2723c GIT binary patch literal 21260 zcmeHvc{tR6`|pslBuOdBpp5KWhz23TShMehWXqOawhARtjV(K2>}0K`NFhbp#uAds z){vAX+0Xr%zTfZj{C?*-*SW6q&pCgb=lVX^=% zczDY9teLN&=SANDyUUI!cROFNOP;=$T+6LT6Z_W( zL_IG%i5*;BFhQZXQ8-m)qri-BqgQ;BmUE|mPB)zAzIlIFERHVcY7Q3Xw zHUgKw_B8uuJXWQOIqKQCN~n1H9ZQmc5B)%gZLg2ba&3L)(r&w{b>J>r?;}rJ+zqj> zS9j2+?b+{iu`{Fi!GmKYi7yP5LouKI+~jO(_BYQC_*bo^xxas?yuH!2T{ikOK!{O= zNn+{UF3@%ET0Q}r^{Gr zIg%RkZf17YZ^$vlWou*g)d|dX5U92PkYh<@r3`u}-wOuweXNovFTKyvz&vPgZ@+J$ z3iq&aG+D$_%I+o2+=nL#`gi!fIMf@itPCtnc1WLZiYVINeqt*ZbUOkzo{_UWJ18V0 zWBSy8?m>uZ%>4RromHf14wB^b-XW&BkfyPUu9Bu_Mr za?aG$#kj+gYDZ)|q|mhGN>o%RlylU~jBDHx8Qr+JIPIsmBpT;StE%+J+wPe9`PGqS ze={9m2E#Pp-Pf0oOE^yU3|~Jo$)mQ~Sh=Nlp8=IN&#}i|%DFclM{{DQ!*udar+8x<_G*`32w}RfK%XIl32-(d* zhe97+W0U!r5lJZFjcjcz&1){E#$RRfT^S81ZEXDLdplnp8SL&- zx5{2P`4_&7zB$p+yA(ElG!q;!3dn#O!TtUHf`WoyY8Pn^(OkWC>z0wBp#xUaAP+Pn zB45U-lVi2f6T9mH+=q9ml5H@i8ZstsEF z)YR0h^&EpEJl~yS8&(Xr`2{Rgg|bjSMiqr$?;V6s>s_vQpRH=+G-Qj0b+Uf+13yPD zvwWn>6}q&KcJJ{g+;mHyZ*aM8t}P?)Q}%(4JtTJV=P3-XVz%V*Z|dC%c4z75l|TwoCY3fK9o5=xO1FcjGXu2MH5e$vOSN}&Os+SQ z*={O>v3vIH1MGrw6LGl}6}oWe2@c%R#-^q%o1^y-crfx5 zNiZZOC0*ud^JQ!iZ}a9a(f@0N2M^BJv8BOY4@Mv5d!SB5S$mYU< zQ2Y6rfBP#WFRuPmFxl+SpssFilf(*S(2Cg;)V(h#V*Wh$vB5Ig5l%q%ym_+!{6}}J z+8K&IM-G1Ya0yHOg>F!*jdEI%(?OhtIeEq}#S_7zJ7A>#OnHF0)`Tq@>-+UCnTTT-G$A)#8Fq3oVa;{yYR*6A@O6uWoF`#>mKWo5Fvuh^E@^ecR6%}bv{NN5$ zMC50pXl!?nV6r3l4PAWv=FT6{dyX84QPoz}V$*&BT1|h4`r1IXaI8qW+@H-qOH4dK z+Q+Q^*amx$B8_L@=&R|_o?rS9r@>6x1#@>N!}qdGAm!2zrG z@{jRgj!~VU=$&2TybwzaT!SB!^AYfJh#6qR`WBJtVEf3`J`)^_9Vz|txVpOfJ(Umx z=uDhb_ieg2Hum90xhu(Y~!?h;R&Kz;Zr0i_Z ze{PERfVq=PQv??Fas+UhvLXR~nq zdaH!BBrm@Gq7LPt$-W}VMkT}0ioJ_XVZqv}Dj99z2GGAF*LA<4Z7c)+* zs36V=X8LrV0u#tf`JSuKbf=?4FrNOJ68sBf=YlwTC4Brl=wbhjm)Rt|2 zg$HDQ97VJ6AHNONAg;mB`dya72(0jr*ANpD(vo!QoH+lI#%ZJ;2{hln)dt(oK7Ru4 z6K>_>l}e)joGW%0_S|5FwcmWh3TW99q7Nv1Z*Q-Z=SO*xME6zBpox8%VQb{Sy;zf} zN8{?nI8KE$_n`f^XNh3(NIEj37qASf$Z5*HtQJ;S?lZ(rCK|$G<&f8JCh>@VC z#4U}vdfBJJ51v5pm~)1ZZD#c8BQo1>2ILBUn*ZQS($Q|!M2Q$yGVI>1qyAzL(I3>7 zZii7B+*iU}ivZ|89{;khl ztU1&VxYRdP;ij`8!#HJ=+16k1l4@#x!J z8LK=!G^F1C8gi?C@O4bODe}7**>XUpIuJEGIyy2mcl+i?I+`boKAB)?`28go6jBmR z%Xf3`2uxj2QX;sykn-H9@~t-H8RXQRyO%ag1g-hV9%F-v;(g3$Q5wSO^Ol-#m~n3Y*cnSm>!J;gXVun9HEgZTrk(O3kooE7I_2j3Acqp* z@{R``Yx0h?D@qbFooN@UI5&1WRBHYOZ9fERqrznWE|My4^T1O>1}k)@jQ)+qkHWtv+iVY;S-U2sj#_33ZA&9E*p263K6Dk zG^n|V*+Zqx^<~ogDu+7%p%d2ZG->4Zw4!D=>=*a5Q3cIU_%w;lE7GUwmf8xmq#*&@ z{E^{Pd;SHrw2aIV-NV}i-OLg&iF!jrLm8}>@s~zS{Qc`cUYS=I^=jTj7|+T4Q32M; zEo5x4rt5U6PuPzg@9v+r&Qx62meC}(E=p+|+#*NJ<=5nY#%??#XksTxdeRPSzRUB2 zdR+=D9I?fE1|A+2C*6nh$)v)LYGE~%;n&_AphNJd8>nIXyLZxP`Z>h+MKI~rSrC1T z!#47`$k9hU&OJ(F-*jM`DG@i~Y8`V{cQePYX|B!N6@@dZ_?1@-EDzdNE_N!IYNd!e zx(?tpbaeVRRu}7nmtB`<`eS?UnpC@6HUuyC%FRE^TV0$Ml9ulG#neiEqzAwG$bZhl zTHHSJxK3I=q1@8AsCoC}E^)MQd*@wWKem!{2IB+eX;LnD(Py8i%dMXd_|`r?>DtHd zK3t1?H0qy@kzijCX*@ks6|{IUj^k9XFUFTyXreUkewAJGuCvGX#j#6k0(!CiDx3Ad zfufw8rgJAy8rpmI>>)z7y!?Coju6S)H)ej8R`Wwod_5hndrED)x6u)rw9}zP&X6C< zesjb9Fl9Zga@23o+Ty8yIh;&4=k&{#C&`1K0euLn8x&g}Cgw z(Wj>Kjq4SHLPFBMU(cz$`Eq0@Cc5?jv#2xbYasFt!6v++Bw()hEBCpI`v<**ujXII zd5+WvJ37s#PG^m$lM?_F0fc}6d7ev0vPiYCkU$}^PJSM68`qD|g3`q8&RB6Izu6pq zGaeuU>4p?wD!)cN2hSd|&d({)+~%S4ZTzjYak4&tk$04ZhM}ayx9993GJM2TMddo# z*&B4gI&5`vt;2Tffm3#<3HS$?MAV~kM5V*$U3+`4PnSaBozrU?`}uUW)28=^jZvfU zud}z7_%h`JA09ltn*U0R_+ll=18bC_G5C4V&5CViEGxudnu)Uv!C|Vtq>an2k@dn$ z=0+aP#_(lz4>@Iv;OMV(p6yt~u79gpZrQKry#8yB_?cD7u5ewLI-Exg>l3_jp~JnM>qfr0OA`6JhndUwR+i$34DJXD`4E;AKB{<_{> zCrt_m=4ZIxJ>8>W*`y#J(@q$077AOTMzN$#2N4%L<^0CuWM-_o9QyLmwYQ@)W`okO zekHH~(V#3RtjUKOVXdH`AdBh?G5+7)=hAWpDk%gn-8~SVcT6OxOLm-b^UI;<-JO|o z%QK~wGk7ggyAoDp*)7J9k<+JG6WXS_1|9LoaknZ*9>1TQ`7s-mn!kGXY?{{}G$=#R zdugU$%V+AXzK%}Z$FOzxQU4M5_Rh}arR_(halE#Qmn7umED_B{-h@PL)^=;sHZdv5 zQTC`k{qq}CD0)O2h#@a&LaTfVD|V}7x?|5#S7RnMu{?~+3nj+v2V6`_yz*!t^e)C9=cF8c22Hj!3Er#Komet*>Q~mFT};!bLS!9s(_1eexu@v`qWd zsZ#_8UXG4xslXrS_i)Oa0XUJ3cwBSyV#MPb89_>F1qn0W_re|=GYy}yw#9(w@5bsvlw8cSBfeYt`s1ZQP= zI(PFPvMrM_DeJzuk4L*r)0s>rv&(p7Krj$6;pFG%H~i4<`oBdOL?Ybbxn97d_Q8O(~>ZF*SXPMcH+$jCztgMPEhc?%5@2lE2772vop@4WS$j`rS_8aB7 zL(-Mgu_m4y>8YX!^qh@NMaQc<*%zrLW;_Ikc{=1V z+3dGwil{X|n|QqSLlnx}69L^6{mX(m7KT=@Pan&OAxl-mz#rBj3)$U zonE7$aYf>cI_lKtkp!1Hg){88T~cBqzam|t9hNa($j~5+`RnR*_TaOiMeR1KKc5Of z%-s6-r+Rsq&DXwcwe5E>afwTd+1pkfDPl5c+6ZNcmX)lAsvK@GR5V&BCi+&9#hnv+ z@L~MqGy%g}pJ`o^H;RI#wZw@tO3wj`DjSbV8p(E5AOw?NiHtQPUZVr_Mqc57=ZVH_n+5zB4_ugeVhkeiENOJ%yA z(5u&b4j1szo7S)@0)qtpEzgpRO$#}&`QC))9P8T&69ASP33JmUIx8{%==o-OyGePk zD#3>LcBS4Q08bW0NiJ`?EH5t;0|tcm>@%!n(NV;yU`BmbMk#nPtx_U#coK8DH#iLp zRj!LlplQ%wSa3Rf_5=gEsiRKC%!|n5ZAnGNz{Z1Pn{COTRxhZG_~pB z?=s{g*)g+bV&azM8#Wd?5JL=0!6L9Fv(G_Mt0F^d)9ExA25V|y+Sct~MZ7K_PI1*$L<3MjE-7Dc@+2YGTY}i+vcW)T(HyoKU8qr0e?Y*)H#_H<;bnA zHL|ug9U@%kKE8zS>-RIZuy6%=`Xh;ROQhnnwURZ7O$J+U%<`f zE{>*=5HRfRoN=WWP2h+U3sTawOn8{n~K2X`$3)wYIA={ z0hfuM*3jR{ybWiC$`ce4^u5Toa5d7Qn%6NhSMbz6v?MGY)K^IAQXLJK_B2K#PjK zYDy6;2;j+PXlYsMQ6bdk%iJPm+FM-FK}UC&n=&WBjOB(R9e_Yx^++y&_%c17DhG{7 zY~8wfad`=`8~34)u-p1+YR-zACOp(ICHAUr?0lcpS=GNG{- z5P3Jf4q!ww8DhZvR@^@!>oF86V#3hC-~k?w_uRNN|FI#u7sCX#Ho!1?yK_}^+8|_~ zCRR`%%*|t^?l36S%>-Z=e`?@R(~*;x&S6+268R;>ckV`=2e^bmfZI8$sd|DK;>m!a zM$YLzr1({3Y~`P4e}Is-C_-BLHe|SN9vN@){!lbh@guXLh7r8?ytbNJ^sk_-5Rx)8 zNglVZpm+H2VMK{&Ddz;aIX-_g+K0Qo&WcN9aCgLSM5EbA3vs_rH=kl2v0$L%;a0Mz z?A~QnEuH$>xXY8%Y*bV%J1B!A5G9t$@S&I0I_61y-qMmUNgq|a16d{8NPSZ3z1-)> zoiY&<5aLk*^lkTDxu*L4zjfNhI6Ld zXaF#KI8eiTkyRQ62NSC$CGUK2rnWWZDGo3>D0iNUJ`zzQ5188(jR5D|2Xl7BAeAHW z?+;?d1}emjYRGrmQxyK@0>B-l#mq6P#1X$9L-xpn?C~)a!QSkq-sA%58gAXeDE@&r zVMUaS7=XZ=-4Rr4EufN#<@jBDIf@!X*VAA>Xo_9=eCtg@-KgKGy)<}?ZLj}eKWhRX zVz~ZToudGA?#U{&CVzJ?+1$BoVRsGQ1(V8U>~ zqPUL(2qbh|Z{Q%oj<-Rn_uycEc*BC`(8))FN)J9;??K%>4A~>eRzYt>hxV%e2=8Y9 zqLG=IGvXeQYt(Z4bMuW^KErogL6&C0uX1sfjDh^iQjJGQ|$E^F^v< z+=P6`NxU)cs!XrIJY7ndI3xKV1@^`r?Jw~ z<4LRU0Th}diBp^FD}%StzC}CmAGclS)VH@bb=s)9k-A01ed#N| zE(OKsDS|pPEjMDu{E!E*8CB$#G1mY%?%Vb@buGc&Et@RBo~ujNp#5Ci?d`tbB9>$@1rd<*~Q0ut?)flhHfE>n?-dHRqb1 zABX1*`wLHnVOWr1rba^+-?bl6u+Xwj*-57V5|Qs%Q7RD>L?jc^AxL9Bi){KWWJa;s z!I~ch3Z0`M{5m9r2`bEZ(E5Bm^UoGbZxJx^7%g@VaR zILJiGN5%>19`=GJ8S86(r7vHeK|(i*p2Q^=n}uoK+B$E}piO%wod%z5mb?LYs|^+I zHln0Lp=(R}Z(_w}_Tx%*ZYZah;cJb1cZ)T&^a*jtP)2t8(h{@QUl~>qz`NOs1d_Ix z@_S3Ow%Zo_k86wn6G#&OpsqOvBPMZVaoGxXTtR)gTV;bu&Bb@1ZxMFLeyyruzlX#I z?sUrOZGR^Ydt#a6U7qKsSeZ_5P4Eedie4P0MIq7)^CS13EvRfD=oV&I9OAf_fRc#$jIOK96q7y*|?lMV_>j!&3!fp(w^@*`G+o9`UwbFR9!BJW;|? zlE#EWRh1MM-8RATBoFMvA5V1bnsaL9Gm4nP7QVTQEIo@?2v7Mjk|l`-|*Q#*`l=c4H?fmcT1>Q z(NV89juD;*z(pEv41HSfIVRfXePN_NWXzPA<8+>!q@>}KCr{enywS(7=t&T~Y=rD#m%8bWlT*^w zjUPx(nO&gYZ}beZ^o3B!(v7Isje0xc^WJ`Js0$uCv4>5($rpo?0Nv)c8v&&c>~6#^!U#VLbNE`~G}83Z=>M(OM6_*JYnGc#_YWTp*ER_27_A2n_E+aG<*B{q5RL?(Z-O zIpz6A!3jx8K#U7_?mmc+V|qWQZznJ86M88wZ=mTvH(UVE`NhQa!0x0eT={kHn`{t_ zVgZON(P2uvL6j_w%Oanne@Xg0xVQ%=IseSCBU!941mz6%uZYKhVVP7|6$@27J_EP6 z=lb5$MKFj4US6!xL&9?5`%sNK)R~O4Plx(WCYhFi_D{7N%3roN1>C79D|kjAbb=WC z%DcABw@CJpdaq=B-W@AbJ;lvhq$u=6G(iwm%e0e5$;!pUW8m7(-F=m|ig9Q;6F^Ah za$Co%N*t-yd;g%VNSVvx;rXj+>8EVwFX&`qjokoj&8)6je(rAR#+$j(o;|^$VIf2g zAF0PWI=Q{OGLJx?;^^H<8DL6p?rxl)1^lXiF95GP*{7|uLw}{_|2{J3T%J6=3`8T> zwI%Y*U}bjJmG4g?1uO_q(45KBNng?fbT!J6e7H?NlYGwmfn%Qo{FP168&pp}DIg;= z=qrr!2G7GyfGTH!R?3XJ;@Ulr$Deog_w@lflb@Q_w_pWz62Hym!PyT!UH!0~gsIhl z$i6UQ9Wd$6HF)wpvy)BLx{=E~-ixY)*% zGe1+_rAuF)&>;1oT22XR59lqj)&4J$R&FA2k$kr|S7v{wR?K#$X0Hs0?(y)7Ptp-o@sQYcLPN&E3 zRJH#1GW^VFz?d^i=lJwc`;*&a zU}HfMpLsvBrS-W-vkziL4UCOhC-ahk>|ku1BnpAtXxRFktFyB>TEGK<^$xM;R$N@6e9N1lV@dh)r~owCad zc}0A!%M*N?yc&O9R_eu~!))}luz|mZf;VFLYW>#ztpi5=pi+2A2}KX(+oqzz>@W*3 zB^Ul6qE>;Qqk^YWoq#TPML{V!?@8^3{Ee!h+04oDF2_ZTi+^XCzxTSE#mpEIJJx#uW?=-j+Ruqgsov;*> zKUY!uJSZzT%RBn}W?^_Qlz#KUZZy+VVbaYutm(O5^bZcYwI>Py_AZI$&1Gd}B_nfb zi8bUyt%&5!a;DOzK?=A|6f74asKVY}0};gPej6_6jL)mNt~4E)Tg@A)cad1g-(l_y#_`xb8O=x>Eed!QbFwWrcLVq7G2m zeBJu;@9}vR$~hGP6XJs0@f$%p7bqjtj{i&cV=GU zi%3xWLwRTUvOE)$&%o`rI=r=MgbsZFSU;VOsZuHT- z-1f)sqeSw5EDD1i&>TWB%YZM(en5zh9v@`U@_~0VD;Pl_2+j#)fm^IXvbEyvP(7CR z|7HgM;@AD~kHA0_d%j_iHH{8>TybT>d)TG080uO2x_eM)D4^%4AXU|k-#-)YurbqI z1zuzkD3nnt0DM0_H|wasG=*aOnHNCJlBK0lx-kTf`c*tyYxU+)fG(aqF?V=%y9Xd? zi2qTTqu?2t^sTMSy~kfweUje=bjMe()Z(}lZTf9R;&-9AEnxY>)`o@&NKx$h=A0)? z3ZyO|nF8CT5@2PBnNc`MICHGQYq*dIWN@r^fzvepNmjm#l)b&-#Cq`H<>R~maJz^5 zLI2C}c$R^XmKfl@LD9+$DoBvEqwqA~J)fHYM^+@f3o)zGQz&TOsAybs1=<1&K|A$9 zrd&W;JQYgA3!+3m5k{5K!0|X&508r?${Ao*-@SXcHq;gN>iJPrjtWHO8MOely7ZSA z3uEv204KHV56B90vj9ZgghNo>?~lisfawvByb|oGP*_HIhu$qU*zariQIdXlJVHY? z5=JTA08cDyhe#wfI4Qz{U@u}(`xINP=x}a@}nYX00`*5h(M_G2r|Y1!bRXyWKhUC zBTlXYd|Dg$)1E;C|0C2Ez~f<}Unv>+A`pwZkN@FC+M?gI)VnMEXxc$=fC*^=_Mt4? zfj=1x5zl*nnKxh^fyZbL6)j2hPSjl#9KMD7=a*5Jtp|M>*`Rz6xT!N1)B>qB*J}RH z#7M}oPr+(Tz+CqL9H8A6p==wrT3{3Sc_+dFM+)JedlLxa^@Ds!eU}Yjwr92;J zxTaLuxF#6eb(H)g`I%O-u$>em%IhU;A>IwBl_jO6fObh-fVz4~QIR-$2a356d9Sp# zHj!-ld)MF};1l+y3#!6#h*bGw1!P=W*$AwlKMzAn|06dN-erQXgp>~2T#2hu^wOsA zvQS=U9@n6Ll>c{fBrF%Xbe_gGHlkxII&DgfuyDkM!hw7NaJoqX5Y1u&;S~Tk4nSUVi*an4i2aWPNK(NjIx4#;D)PO9BLJd;}1*RoMWm>2P{SE{0QcDjT z&K$fQg^Cyu*P)DZg{hJ=S8G61_b>GN|tmy0t}ZX%*g zk;a7oGlC@Ut)DgElg7e-;gbMadY6es$WUnU_Wb(x=NS%0z3rMMAj6-5*G!O`YjxNzZNouEbQqP*jU3-`f3-Q)rBtG{{s7GbwW z&hA8YA4DE}KH^@xbMWucUQ+myhfqqEaJM)L)bDWqp}kVIc|!sV5IBlE9(kwr-x!i1 ziNJinqqhguCKdAA%R|`Ps@@&g`EXfLN*SNOQ#VOWPE2^QW8MGYNs zy>ixm&AA~PMeY;F;KZARKP20u6|=4j6K^OZ9)LA@!yp~NW|Cl5k?(R?V?}+6qC-3_U$h=f?gHsGpp5y=Bnr9iZ$mPVh;kG9 z6s9caF%YT)i${LXk&|!#WuX9$`JZ``f0-u}0e=2-k32>Z%l8j1_?P9&F$TgLGzq-6 zU&6qp1x8;|S{l?^P~4rc{MuoWM;~4yZ>={X$RJ`b>7j6z)BnFBN`eJPykh#>Ou3ZS zuejrM)bBFoC})op9h?)kHrL%?kBAx_P*v_2z5@>cf<}r>!pqvU#;FUr zig%UZ<_!z~XQm{qCGsgPif;mFK*o^C=(H)(&J5R;es5T@p{x|KMv?gi1ulp?cgWeH zu<)7(3*@AKxjp~IcQS5EUwbZfq@TAM1pAleK_njsoDqc}zn>x@O#u`~voPcGEi%8e zI`SH}@^lO$@_#;)zeFZcVt0oeG?H>sz&u!a4y;^v7{YIW`e?dOESEfdNbxAtd0@9( zL=3Bdt8u@6e<56WO-%;FN)!qWo+!r}8BVP6_XD6r(u*}LvHbJSsCI^|{&N8EwA-5K ze=k>tm(%Y*j$9uNYLMOB45Zfj%F0xQ`EB$g^?p$2a)q9iKT%8o9cnnq(cI!$U=^Y| z2MgL{2mO{4vNu%0DVMFIP^x>7P-gajOO`}&$H0B}y$Kmbxmnd2C?O@@Wg7=D53nL= zzyizP;mZLX7+{;fiUTLI$I`Q*0O}_Lku7vkpupoF0Nc#<_1&WY(xULp`)l_Fq@|_R z2F%+8W$|?_!u{uHyEjV&gafKZPMSEzH}Br{AMt#a`*Xal6yii>=KJx9wHEDd$TI-W z)8lubGz<U66o@A};RTA>NG+zqW!0VULXMV$pxnBNSr2>=l_Eso> zbJ+mSiL|X6)i>BSJ~vhN(!c|&qWr@LyY@FR{ID86z8eO;F97+=?JqSIg3J#Zgcjtx zeDm`^6DyD#3+o3eBPGy{r@mGMk!AWxcLPY3l7(0I8kM5uB-FZb4AW74Acm1N@y3)N(x&UX_SjqYG69o4 z4~R-S_r;Z=)8_&P!@$v|55={*OMjtr94H9Jz6Rc4Lia*kX=Gsmy)3KOOG^A-dt-&@ zI!)N7v}Q!c^bFhPW6o=7ZqImsm(j$reK&HPJn8=7x1t{)A3}0ZyY8Jh0f>p;OkeT! z8s0lpJ9ZUSR~r}-wDo}xidb&}JGg~fqEA$jTLHvpz}!(vEKkqp?)Vo(cLm9gcOR6` zD=C@RBI-7VKYHnPEB`3gicZ`5mPo;coA77Iwg+y|Ww2u2?Zq{xM1b_(zO@0&uD+zC zgwau39$>p*K#`<HuXEDldY8HW5HK&`!DqaE^lJ_{^$KfW^MYrJ3nz%8PEoZ9 z$>`5nVQVgkP0CQ)i@JFV8ZBb~CQ7a?4wty)1J}`_ zA{@SuIQd#vLKT2xw)SFgXU`H@a%spZlXsNA>*?8EahyQ({`!PY?M3 zK!@Q73?oc9jRO!FL4gT++0f;{w#S7BP-gRF__IRiFVGGH{d=rCY4|XVDk9cIBgM6z zJATc3WQquc^p`)lSffpGGXRjxIg4l+*hYO0H)Y$(D=B?S0i>QxXB7g_cS3p=0~IS* zpr2bb1Or!crqx+PXsEv2rXiRNXVU`=N{XjqL801O`Q(Q$0rt)=@r4=z>?|Lh#0hS= zDz8H6_3Y4LhUQXUR@d19wZFi;Tm;O+npq)W9zysW@p!6(XWO%S5D>!mfaik^aKXa3 z<@Qk_jz|9POw`X)D~9^P*zX!>c>%U0o2I`RFa;63Sz+t<_~i`k)h%9pSWXLi&N=p6 zum7n|!JW$Gh*bUo^MwC^d82+Qu!7R#S7oT13%Y zesPSNh32Y7o4&ov*_ej6Q6=5S{JdT*+#oR=lYRfBc311#W#`JIgS(G;GJNg7PgDE* znv!J@?$`>8;mxDZz6~{mM;;Pj)`;Ak%UaxgE1nP|xpu*aZRLu8*Qt7UBuq)TEq9p% zLYq?HPZmSlEP;cLD^CO}K!sjSqkG@#+)d9|b*+Yca2)MUqkiEIU6IK--e#N~TBcid+p55tO~ITJskW>ITgz!%s*F)0;Q)8^7fG2-fE}E4wC*iEd=23ag4f>Q3M(4h{2l=0TySp!J`14}PLN^u1LdO-de;FUqe-*4cV5yA&{aq{fMK@4*H9k;aBnn%KuJTa4Vo@a@?;pTZ8~ zJ0|Nh{miCgn;w*VLr_0!1I5PU+V^urEbE;o+mjG*=hBF7+Wti|;o~Fq2x?qzQKt!Q zZatCo`=L8d*wbYXO2aQh|BLLOSd$3rpCp?4^pBT06WPBIP2GS-yp zD}195>_1gjI z{D?g$VsQ3sRLGcO@E5L$!oiVxNahkXFkp_LH;BT7?JLrUX0v4e4M) zNapW>8*j_ZEpQ3wU4nu{9PQpP!z@$bn1CUA6Cz8DgzKf-Za+R9h3OA-S+G5X@D3@i zLI8J)tmt{^QXkUILj2yN7(dRjNooweQc$>m4w|KDsPIU~wiIj$V8j@C&)WQY0$)Lq zRM5vvY@m2Wx(9oO%tx~VXaKs;8PyDsB0VE0!-MaE= zSk*_B3=ldT*zN-8d%nvO(}VAnRG@D=r5DrU+~1GxF47+}MEG*bC=|*GO@%)OHVP0` zq+hz-&ojlhk&KfqUYsO8n%!KHDap@QZJbZ%q(Py)O!jdL*uT1c7);~BGktuuPM31c z<%yuYCFu8d0c%EpEDe=mOrybI2E1s_;IBtz% z?9`Yy?j!X&0Uz{*$(lGBHk<3ohxy5xP#SS|A8Q<4VgoW$%{3Ix9tvvTpSF>kuHFyX zKKOGsp53xBJeG;$COPZMtDnJ0tM36>9vyq6+V?TgA;~HrGO(?*2&-2icLrcrBM1e_ zkgcI?k5J+B>)l5Pw4C>ai&OGN3Dck4$j6FPI0Mh0cm!x-#A_ZUeD^)eN~jSD6~A8M z$Y4E-4eb7GB8);Y2hnJ-tj&3bU->;yn%-J&`sT~~ax-K~%Gl*<5tvj6yrHed*g(&F z*0>r5E)4rsLrXCjaMVhr%-pysq|sPKB`;r@Q1~f>Ek8P1?cIHe<|U-Z%jBpMUIUE9 z#jY%#uJr(1Dl9MKb>cLu>#uL8z%ZRu*o8vnw9?(hoCsa>Q)>fL8hd$ z7j(o~f*OMhStA#wDQ+L;Wf_b)l*RXSF;T+`Di^Crfu6EhkuwpP7#9*}vb&S!jC(Kx zb&qBJs10y)Bo*M4bI!sP51~t9^XDD04!_EjzE?{eG!Npe9zC}STXl3Fs&1tmjU;UO zYS7};8}H5(-#W4YU0?sL)?rG5c>_@cSjv}Qb0aXb(*$wwW+_)OA&w=+&Da8K3sind zWH+B~Gjs1dbf?YO_PMFSRkDEiFm3bMJnwKli{DXd2@{HRNl%RcUXC&RZw zPIX4%iTAUp^N6p#MJZZw^snzjmoH$fif{a$#@ITP)JzgbYn^+tp=pgW!@DnUr5}K? zG`3t1$5%)x?9BBl@SoqZMS8e7k%l>8YRrR!Vm88UE_?!AO9vv)@SW0?1Ec(&a;_I) z`hMSa<3m4%R1@x7J&J|8y&eG(kyLEWAl+J<;#RIs`sss@Y(EEDFTdgAA_H-gauS~s z>F&}6FZY`|j>PAOOTxsxXY1#@jvPdx=%lGJ*FJ{$#0d-O8Ki;mlcaD#7Bv^k$&@{* zMyQ@MH-EwsbBQF$d?qU(roH{Q5;z}b8ybxkpf#2dgKuD{Y4{Q#OPDJuFPBCR{!>2P z-J1Zr%WoLR_n_%Y3F6kz!x}!LVWoWP5vtmd-Pu?9;?UZ9%KX+vX5XGwMhb#nKZY|j z)Ylgnd#<`M<8`?{MA4F!l?GZ4>G(SBd8Qgx+9!ij?q^+P9*_D8oVK^HC!jMzXAfQ! zk>!9gw5LKsN0HTj7_0iqiU%)CMgF3Wo^p|+;61M(KIHysf-V@DnsRLklD;xUT9d}d z-;eKv@#JAVNWM>Puu@%{lCnN3_bU)ohi)%5=1jao-a8R9XI;|xbs=u}= z-#G*~)$6FzG00+88y$mp9cx-~e^TKV4BFg8597NqFo!wHDvUj%;GmK)gl^NO{81^F zUQFotkulltR{&>-9)Rchgh2U4r_D?m(jaMoGiRyyMh|D5SB9i$(#g$7LF4#|gf z`VQt<5G^<$Gu$(=vI=>b&;$<9G%Tz!_w1Xi>p{m_kmf8;WGU71r1P2V+)`HDYHQH7}_vHH}uuTz&-0_*2B7@~AiQ;f5Q|*4w zji9THqD_blFnoN|KTNH5D*L2yae+s zxLt0*&5z2wJi5!{IT)f`xTQt_OC%-v-Fv)ex6Wzfw)in4U_(-l@g0bzy?(Cwk)1os zBfA2uUVII1YFjZ_l*7i)bjxl z|0wpp7A%aAsHn-si&t>0Fvm^JI?pj1D082r7$C$Qzz-PY;_+7|WVtl37lN6n{WPlH zuL}wsF1&r4@lW7DM}?<>j$yIEO@m%FkX})oCWc)Ke%gqn0&3aG25&>RcnOlr#@Fat z?ZmO(n2??I9dUm|z9m#4{>Sm` zPiR14{kTrBQvGH{elW?$OSiA1z5~p`4q%^2{NvIk0jmI;BkBTQ5fuIQxuS z!TejwxNy&>7cw&ddPq~|>W5E3N{|)m-#A?F$15VEK*Q$`BL@Tg0Jo z1}WD5sSt|rx->jy6`HBnu&6xclhqA9>#o6IF`5P;hNuF!n_^jYZ2o<@DK9TCCHf0- zhd4>@vXF^|#hK(~KA?QzocHM^*J-%8(0eq1lH#tTaF>z6;pe6v=j-t{xCHL8nA(F& zU%sIzJTV}I{A3B;-2+|#N6#Xpv-~>zX(?FcgbHqUsnm8;6MiQ_hH{2w5a_lbL@{V{ zANpmF>nBX-nD=7msL>N=o0b)sux1dyNDH0x z{m|Gv>Bj~B0Wv@V3@{8T8;NFzth&{z-k><@2pHNPu+q!k%UMU`KsWk199&N$l-) zbsX8viR)HCe$w2;8s!6xbV5B{>#CO@A?sD8s*bhxs{M#G)YQo$b0r| zku^3+bL}Y^hxWc+X%H z{7>Enp^jk4u|rK+S?7x_A9)apRU zR_HJDQ=Mw9_FcGP_uzrUbUqQ^OoV@Ba5&{16gJC&jL|B7{61&vwwFcB_`qe3nt{)c z>p0rV{A4}o*r~21!0%I)eGGQXTv!->T_4UvMuYO2?;FPjtJiNHnVhTx1izdFoG8cO z1K=|CY3Ou|;gq;SYxNaZ--NeUCv!Ej8@L6Vs7hHcKP;Oh&NtEn&KV~tEG(sf#G$g_ z6rmNq8;Ak57vHf1AE={#I;QmKyVV)vJNKbNkvCN1B*eqhyd)0epA!$~!N$8@y0pgK z1jMeEANc)sZiBjj{5}iYoV69=ywg!HG#S*uJDHm0|2_=YA1(9ku6s(yqW^5X+%4qS zBcL>hl-8pIGCzQBop~zq_P+^l;DmZ7DL&&-?xgV8N>FA0-9TX5APwgvByRCy7kl>O zTG)^4T=%o~;b=5&euLl70j(w?t+X(9de#nDW_S-YV}-~H)x%%7zixk>q_SX z_hI2RqKTOsUQpC35y%UoD)7QBjzoz6|IPn Date: Fri, 16 Mar 2018 02:07:59 -0400 Subject: [PATCH 2/3] Fix for scatter not showing points with valid x/y but invalid color - updated - Fixed ambiguous kwarg to a more appropriate, less ambiguous name -> plotinvalid --- lib/matplotlib/axes/_axes.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/matplotlib/axes/_axes.py b/lib/matplotlib/axes/_axes.py index f3abcb411a45..8766fd64d01c 100644 --- a/lib/matplotlib/axes/_axes.py +++ b/lib/matplotlib/axes/_axes.py @@ -4073,7 +4073,7 @@ def dopatch(xs, ys, **kwargs): label_namer="y") def scatter(self, x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, - verts=None, edgecolors=None, masked=False, + verts=None, edgecolors=None, plotinvalid=False, **kwargs): """ A scatter plot of *y* vs *x* with varying marker size and/or color. @@ -4145,7 +4145,7 @@ def scatter(self, x, y, s=None, c=None, marker=None, cmap=None, norm=None, For non-filled markers, the *edgecolors* kwarg is ignored and forced to 'face' internally. - masked : boolean, optional, default: False + plotinvalid : boolean, optional, default: False Set to plot valid points with invalid color, in conjunction with `~matplotlib.colors.Colormap.set_bad`. @@ -4272,7 +4272,7 @@ def scatter(self, x, y, s=None, c=None, marker=None, cmap=None, norm=None, else: colors = None # use cmap, norm after collection is created - if masked is False: + if plotinvalid is False: # `delete_masked_points` only modifies arguments of the same length # as `x`. x, y, s, c, colors, edgecolors, linewidths =\ @@ -4320,7 +4320,7 @@ def scatter(self, x, y, s=None, c=None, marker=None, cmap=None, norm=None, raise ValueError( "'norm' must be an instance of 'mcolors.Normalize'") - if masked is False: + if plotinvalid is False: collection.set_array(c) else: collection.set_array(ma.masked_invalid(c)) From b976201e1c65db5eae8415441c716261ff2d680a Mon Sep 17 00:00:00 2001 From: btang02 Date: Fri, 16 Mar 2018 05:01:17 -0400 Subject: [PATCH 3/3] Fix for scatter not showing points with valid x/y but invalid color - update 2 changed test_scatter_invalid_color(): where masked in ax.scatter (line 1680) => plotinvalid (line 1680) --- lib/matplotlib/tests/test_axes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/matplotlib/tests/test_axes.py b/lib/matplotlib/tests/test_axes.py index e13f80b22046..55ddc10d1d1c 100644 --- a/lib/matplotlib/tests/test_axes.py +++ b/lib/matplotlib/tests/test_axes.py @@ -1677,7 +1677,7 @@ def test_scatter_invalid_color(): cmap = plt.get_cmap('jet', 16) cmap.set_bad("k", 1) ax.scatter(data["x"], data["x"], c=data["c"], s=data["s"], - cmap=cmap, masked=True) + cmap=cmap, plotinvalid=True) @image_comparison(baseline_images=['scatter', 'scatter'])