From 7eac2f9327b004e53e8c5708e4912897762d89d0 Mon Sep 17 00:00:00 2001 From: Adam Paszke Date: Fri, 6 Mar 2020 14:31:24 +0100 Subject: [PATCH 1/3] Pad plot_surface inputs to allow for vectorized processing --- lib/mpl_toolkits/mplot3d/axes3d.py | 54 +++++++++--------- .../test_mplot3d/surface3d_shaded.png | Bin 35476 -> 35482 bytes 2 files changed, 26 insertions(+), 28 deletions(-) diff --git a/lib/mpl_toolkits/mplot3d/axes3d.py b/lib/mpl_toolkits/mplot3d/axes3d.py index b4e6f6f15f28..3d351a44194c 100644 --- a/lib/mpl_toolkits/mplot3d/axes3d.py +++ b/lib/mpl_toolkits/mplot3d/axes3d.py @@ -1533,7 +1533,7 @@ def plot_surface(self, X, Y, Z, *args, norm=None, vmin=None, cstride = int(max(np.ceil(cols / ccount), 1)) if 'facecolors' in kwargs: - fcolors = kwargs.pop('facecolors') + fcolors = np.asarray(kwargs.pop('facecolors')) else: color = kwargs.pop('color', None) if color is None: @@ -1551,33 +1551,31 @@ def plot_surface(self, X, Y, Z, *args, norm=None, vmin=None, "semantic or raise an error in matplotlib 3.3. " "Please use shade=False instead.") - colset = [] # the sampled facecolor - if (rows - 1) % rstride == 0 and \ - (cols - 1) % cstride == 0 and \ - fcolors is None: - polys = np.stack( - [cbook._array_patch_perimeters(a, rstride, cstride) - for a in (X, Y, Z)], - axis=-1) - else: - # evenly spaced, and including both endpoints - row_inds = list(range(0, rows-1, rstride)) + [rows-1] - col_inds = list(range(0, cols-1, cstride)) + [cols-1] - - polys = [] - for rs, rs_next in zip(row_inds[:-1], row_inds[1:]): - for cs, cs_next in zip(col_inds[:-1], col_inds[1:]): - ps = [ - # +1 ensures we share edges between polygons - cbook._array_perimeter(a[rs:rs_next+1, cs:cs_next+1]) - for a in (X, Y, Z) - ] - # ps = np.stack(ps, axis=-1) - ps = np.array(ps).T - polys.append(ps) - - if fcolors is not None: - colset.append(fcolors[rs][cs]) + # Calculate the minimal amount of padding that will allow us to extract + # vectorized patches. + rrem = (rows - 1) % rstride + rpadding = rstride - rrem if rrem != 0 else 0 + crem = (cols - 1) % cstride + cpadding = cstride - crem if crem != 0 else 0 + + def pad_for_patches(a): + result = np.empty_like(a, shape=(rows + rpadding, cols + cpadding)) + result[:rows, :cols] = a + if cpadding: + result[:rows, -cpadding:] = a[:, -1:] + if rpadding: + result[-rpadding:, :cols] = a[-1:, :] + result[rows:, cols:] = a[-1, -1] + return result + + polys = np.stack( + [cbook._array_patch_perimeters(pad_for_patches(a), + rstride, cstride) + for a in (X, Y, Z)], + axis=-1) + if fcolors is not None: + colset = fcolors[np.ix_(np.arange(0, rows-1, rstride), + np.arange(0, cols-1, cstride))] # note that the striding causes some polygons to have more coordinates # than others diff --git a/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/surface3d_shaded.png b/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/surface3d_shaded.png index 65a31a7c3a22c15f610b6b439d2f5ab530be1d8c..209ce950e78cc616d41f6900872a117cde01f972 100644 GIT binary patch literal 35482 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 Date: Fri, 6 Mar 2020 14:46:09 +0100 Subject: [PATCH 2/3] Small cleanup --- lib/mpl_toolkits/mplot3d/axes3d.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/mpl_toolkits/mplot3d/axes3d.py b/lib/mpl_toolkits/mplot3d/axes3d.py index 3d351a44194c..ed02d711d14f 100644 --- a/lib/mpl_toolkits/mplot3d/axes3d.py +++ b/lib/mpl_toolkits/mplot3d/axes3d.py @@ -1559,12 +1559,12 @@ def plot_surface(self, X, Y, Z, *args, norm=None, vmin=None, cpadding = cstride - crem if crem != 0 else 0 def pad_for_patches(a): + if cpadding == 0 and rpadding == 0: + return a result = np.empty_like(a, shape=(rows + rpadding, cols + cpadding)) result[:rows, :cols] = a - if cpadding: - result[:rows, -cpadding:] = a[:, -1:] - if rpadding: - result[-rpadding:, :cols] = a[-1:, :] + result[:rows, cols:] = a[:, -1:] + result[rows:, :cols] = a[-1:, :] result[rows:, cols:] = a[-1, -1] return result From e19fd1c712ac6b7d9368e24ca52392dee87af1ca Mon Sep 17 00:00:00 2001 From: Adam Paszke Date: Fri, 13 Mar 2020 21:44:08 +0100 Subject: [PATCH 3/3] Remove note --- lib/mpl_toolkits/mplot3d/axes3d.py | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/lib/mpl_toolkits/mplot3d/axes3d.py b/lib/mpl_toolkits/mplot3d/axes3d.py index ed02d711d14f..f6b47e384793 100644 --- a/lib/mpl_toolkits/mplot3d/axes3d.py +++ b/lib/mpl_toolkits/mplot3d/axes3d.py @@ -1437,17 +1437,6 @@ def plot_surface(self, X, Y, Z, *args, norm=None, vmin=None, the input data is larger, it will be downsampled (by slicing) to these numbers of points. - .. note:: - - To maximize rendering speed consider setting *rstride* and *cstride* - to divisors of the number of rows minus 1 and columns minus 1 - respectively. For example, given 51 rows rstride can be any of the - divisors of 50. - - Similarly, a setting of *rstride* and *cstride* equal to 1 (or - *rcount* and *ccount* equal the number of rows and columns) can use - the optimized path. - Parameters ---------- X, Y, Z : 2d arrays