From e1523fd7a0790fc0466e17c839ea220308ce32f5 Mon Sep 17 00:00:00 2001 From: Ruth Comer <10599679+rcomer@users.noreply.github.com> Date: Thu, 15 Dec 2022 17:58:27 +0000 Subject: [PATCH] Backport PR #24732: Use masked stack to preserve mask info --- lib/matplotlib/collections.py | 2 +- .../test_check_masked_offsets.png | Bin 0 -> 4078 bytes lib/matplotlib/tests/test_collections.py | 20 ++++++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 lib/matplotlib/tests/baseline_images/test_collections/test_check_masked_offsets.png diff --git a/lib/matplotlib/collections.py b/lib/matplotlib/collections.py index 26514946cb79..b5ac24dd54c7 100644 --- a/lib/matplotlib/collections.py +++ b/lib/matplotlib/collections.py @@ -323,7 +323,7 @@ def _prepare_points(self): paths.append(mpath.Path(np.column_stack([xs, ys]), path.codes)) xs = self.convert_xunits(offsets[:, 0]) ys = self.convert_yunits(offsets[:, 1]) - offsets = np.column_stack([xs, ys]) + offsets = np.ma.column_stack([xs, ys]) if not transform.is_affine: paths = [transform.transform_path_non_affine(path) diff --git a/lib/matplotlib/tests/baseline_images/test_collections/test_check_masked_offsets.png b/lib/matplotlib/tests/baseline_images/test_collections/test_check_masked_offsets.png new file mode 100644 index 0000000000000000000000000000000000000000..ebac9df75ddb4636def2c1dda3cf332210832d3a GIT binary patch literal 4078 zcmeH~Yfw{X8poe-5fBtgD^hgP)oB@5H(XpGAVj-Wk+#TM1wk%p5R4Fx1SJ>2T-+*M zYK7VDR$M?b)>*_r16kaJds0v%xWG^eQ3B>@1Xdy>5M#&%*ptreuH9*8_M^7_aORwO z-#PE~|2+TSQ}VmLF)Nn)EeC)Vv3quY2;jg2z@e_ou$Iul(Z|>;v0ztH!T!7>1x)hs zEQli)&~oz%aq6(5cd!e?eNBEmyAQ!>MX4`*eP30uSPnISHqeN3?4Ro578?C;0?`C)xhsYPVm_#y*I#JKs6Ls+t}X z<-9>%C!bx~P5vg+C2D;M;cOK?DcN<>VdXuR%L88dN2}_ed$;3svRl-~M(>n!yw}{x z0dX}!2A@uRZ;6ZY#@72b;<}3&;oX)`BC5=DQI$QpYvm$IDzZN?>4!-;|S%wlXpew9o7Tu z%HpRc`Wa)=6IX=DIPtof>BR%tUuWm~_C>R2#ibVl>P*i^rXyL+B+r?dIKq8JhPy8` zzmeV$!cw8O#@`Ku zXUgQ;OQocUGHw7U^^bc#KZGx@)9CfIsXqexUUN$m`|{+h&gP@{tEjnFlU?KQ2*N5W z^Vm>&TN<`B3dfU{n9w#|9@9nRBm$1tlcuUreBHeuuy_}#Efx#Y6w*4 zMr|v0)S>)=fGQ7|PiCtRs>Fk)yc8MrXhls$&0jFJ@=l1bqj|Zb+#ZHN8zk~ejZ$L8nO+t}24!IkmYjzZHD>6+#EP5+~K-jbDN)684HFrdGBokwNO zJ&yf#`5i?*i$%b0$foYQH0>VkDGZT1w-?uB3$iP&$pQ5+=|*ci7;VHY@%=V`v|hka z1(uyTU4RL`*;|P8O`#7t3G9-NJT{xHr>PBa8Oz59Z-3lYWPCc;dHn0K4oeYNNpd*N{UtWcar-b0+m|jDdNg1ES?{lst9|Q4nZCt-#bjfv z&gym*2lJtcplnRqB0yA%LHgLxMjX^5VWk>^(W~-N{VJJIo70jye2U1Yg#b!1vPp<) zw_1we8ZKv7wL3#pD@G2+ zDCzsloS;#BpHQk9dN=perbK8H){P%e#vHh-2XkPBiT!tE4SPxaLi_pbib!)Q~x2{(^lby zJ6U~`2Dbo5;3TR|3Ni9*LG_~hqNy)`cK99|{Ye|7?e6yhA;zoj(7eG3earAeK=>xm z67D&4?)*U@1YX@vNcZN)%L_4AJWsJb)fU;&aNsKC5)SkRClt#{wVgWYHhiz00Y!7B zuS5b2Jne4nZVkurK5%$JkZJcQ+^EHT+d}V2fbE#QzCeWfE~0g!|M}T!7tn9yxU*Ko z-92#kH`4JYow{XT(KLgdR9$6`mL(@li%I@&jzIHIguoJNN|POL6G$1l6cTA&)Tk+H z2cVleKe6Z*$syvC{IzugfzDbIfCJ93()wI!Wo^K*R?6k_gaieB?8fH++DIZ%C`Rmc zK~r!9ci_o)DhvFxCTnMdP&=j9H%=JLXE|X~zE)yR?e3fOJ0@12T)35AuhD2)>DojD z$>OZ(UyerPB8UR3G`L!6Fn?g7jQVj4r*a^4^px=75o?+@!+BY~HSz6>R>|7J3(#aM!Q!95x*`M_>gm#O~U=Q~2AD Ge*Z5pYdH`A literal 0 HcmV?d00001 diff --git a/lib/matplotlib/tests/test_collections.py b/lib/matplotlib/tests/test_collections.py index 3647e561d2d6..3087703e9daa 100644 --- a/lib/matplotlib/tests/test_collections.py +++ b/lib/matplotlib/tests/test_collections.py @@ -1,5 +1,6 @@ import io from types import SimpleNamespace +from datetime import datetime import numpy as np from numpy.testing import assert_array_equal, assert_array_almost_equal @@ -1181,3 +1182,22 @@ def test_set_offset_units(): off0 = sc.get_offsets() sc.set_offsets(list(zip(y, d))) np.testing.assert_allclose(off0, sc.get_offsets()) + + +@image_comparison(baseline_images=["test_check_masked_offsets"], + extensions=["png"], remove_text=True, style="mpl20") +def test_check_masked_offsets(): + # Check if masked data is respected by scatter + # Ref: Issue #24545 + unmasked_x = [ + datetime(2022, 12, 15, 4, 49, 52), + datetime(2022, 12, 15, 4, 49, 53), + datetime(2022, 12, 15, 4, 49, 54), + datetime(2022, 12, 15, 4, 49, 55), + datetime(2022, 12, 15, 4, 49, 56), + ] + + masked_y = np.ma.array([1, 2, 3, 4, 5], mask=[0, 1, 1, 0, 0]) + + fig, ax = plt.subplots() + ax.scatter(unmasked_x, masked_y) 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