diff --git a/lib/matplotlib/cbook/__init__.py b/lib/matplotlib/cbook/__init__.py index 2f405b5cc7f4..58da636e73a3 100644 --- a/lib/matplotlib/cbook/__init__.py +++ b/lib/matplotlib/cbook/__init__.py @@ -2011,6 +2011,45 @@ def method(self, *args, **kwargs): return cls +def _array_perimeter(arr): + """ + Get the elements on the perimeter of ``arr``, + + Parameters + ---------- + arr : ndarray, shape (M, N) + The input array + + Returns + ------- + perimeter : ndarray, shape (2*(M - 1) + 2*(N - 1),) + The elements on the perimeter of the array:: + + [arr[0,0] ... arr[0,-1] ... arr[-1, -1] ... arr[-1,0] ...] + + Examples + -------- + >>> i, j = np.ogrid[:3,:4] + >>> a = i*10 + j + >>> a + array([[ 0, 1, 2, 3], + [10, 11, 12, 13], + [20, 21, 22, 23]]) + >>> _array_perimeter(arr) + array([ 0, 1, 2, 3, 13, 23, 22, 21, 20, 10]) + """ + # note we use Python's half-open ranges to avoid repeating + # the corners + forward = np.s_[0:-1] # [0 ... -1) + backward = np.s_[-1:0:-1] # [-1 ... 0) + return np.concatenate(( + arr[0, forward], + arr[forward, -1], + arr[-1, backward], + arr[backward, 0], + )) + + @contextlib.contextmanager def _setattr_cm(obj, **kwargs): """Temporarily set some attributes; restore original state at context exit. diff --git a/lib/mpl_toolkits/mplot3d/axes3d.py b/lib/mpl_toolkits/mplot3d/axes3d.py index 6639cfe941ff..ae49613e848f 100644 --- a/lib/mpl_toolkits/mplot3d/axes3d.py +++ b/lib/mpl_toolkits/mplot3d/axes3d.py @@ -1655,15 +1655,15 @@ def plot_surface(self, X, Y, Z, *args, norm=None, vmin=None, # Strides have priority over counts in classic mode. # So, only compute strides from counts # if counts were explicitly given - if has_count: - rstride = int(max(np.ceil(rows / rcount), 1)) - cstride = int(max(np.ceil(cols / ccount), 1)) + compute_strides = has_count else: # If the strides are provided then it has priority. # Otherwise, compute the strides from the counts. - if not has_stride: - rstride = int(max(np.ceil(rows / rcount), 1)) - cstride = int(max(np.ceil(cols / ccount), 1)) + compute_strides = not has_stride + + if compute_strides: + rstride = int(max(np.ceil(rows / rcount), 1)) + cstride = int(max(np.ceil(cols / ccount), 1)) if 'facecolors' in kwargs: fcolors = kwargs.pop('facecolors') @@ -1681,71 +1681,60 @@ def plot_surface(self, X, Y, Z, *args, norm=None, vmin=None, if shade and cmap is not None and fcolors is not None: fcolors = self._shade_colors_lightsource(Z, cmap, lightsource) + # 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] + + colset = [] # the sampled facecolor polys = [] - # Only need these vectors to shade if there is no cmap - if cmap is None and shade : - totpts = int(np.ceil((rows - 1) / rstride) * - np.ceil((cols - 1) / cstride)) - v1 = np.empty((totpts, 3)) - v2 = np.empty((totpts, 3)) - # This indexes the vertex points - which_pt = 0 - - - #colset contains the data for coloring: either average z or the facecolor - colset = [] - for rs in range(0, rows-1, rstride): - for cs in range(0, cols-1, cstride): - ps = [] - for a in (X, Y, Z): - ztop = a[rs,cs:min(cols, cs+cstride+1)] - zleft = a[rs+1:min(rows, rs+rstride+1), - min(cols-1, cs+cstride)] - zbase = a[min(rows-1, rs+rstride), cs:min(cols, cs+cstride+1):][::-1] - zright = a[rs:min(rows-1, rs+rstride):, cs][::-1] - z = np.concatenate((ztop, zleft, zbase, zright)) - ps.append(z) - - # The construction leaves the array with duplicate points, which - # are removed here. - ps = list(zip(*ps)) - ps2 = [ps[0]] + [ps[i] for i in range(1, len(ps)) if ps[i] != ps[i-1]] - avgzsum = sum(p[2] for p in ps2) - polys.append(ps2) + 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]) - else: - colset.append(avgzsum / len(ps2)) - - # Only need vectors to shade if no cmap - if cmap is None and shade: - i1, i2, i3 = 0, int(len(ps2)/3), int(2*len(ps2)/3) - v1[which_pt] = np.array(ps2[i1]) - np.array(ps2[i2]) - v2[which_pt] = np.array(ps2[i2]) - np.array(ps2[i3]) - which_pt += 1 - if cmap is None and shade: - normals = np.cross(v1, v2) - else : - normals = [] + def get_normals(polygons): + """ + Takes a list of polygons and return an array of their normals + """ + v1 = np.empty((len(polygons), 3)) + v2 = np.empty((len(polygons), 3)) + for poly_i, ps in enumerate(polygons): + # pick three points around the polygon at which to find the normal + # doesn't vectorize because polygons is jagged + i1, i2, i3 = 0, len(ps)//3, 2*len(ps)//3 + v1[poly_i, :] = ps[i1, :] - ps[i2, :] + v2[poly_i, :] = ps[i2, :] - ps[i3, :] + return np.cross(v1, v2) + + # note that the striding causes some polygons to have more coordinates + # than others polyc = art3d.Poly3DCollection(polys, *args, **kwargs) if fcolors is not None: if shade: - colset = self._shade_colors(colset, normals) + colset = self._shade_colors(colset, get_normals(polys)) polyc.set_facecolors(colset) polyc.set_edgecolors(colset) elif cmap: - colset = np.array(colset) - polyc.set_array(colset) + # doesn't vectorize because polys is jagged + avg_z = np.array([ps[:,2].mean() for ps in polys]) + polyc.set_array(avg_z) if vmin is not None or vmax is not None: polyc.set_clim(vmin, vmax) if norm is not None: polyc.set_norm(norm) else: if shade: - colset = self._shade_colors(color, normals) + colset = self._shade_colors(color, get_normals(polys)) else: colset = color polyc.set_facecolors(colset) diff --git a/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/mixedsubplot.pdf b/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/mixedsubplot.pdf index ce5201010739..e1c698f57688 100644 Binary files a/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/mixedsubplot.pdf and b/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/mixedsubplot.pdf differ diff --git a/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/mixedsubplot.png b/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/mixedsubplot.png index 49c573b664d5..aacdcd70eba8 100644 Binary files a/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/mixedsubplot.png and b/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/mixedsubplot.png differ diff --git a/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/mixedsubplot.svg b/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/mixedsubplot.svg index 313cc85abe5d..5b5f321ea45e 100644 --- a/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/mixedsubplot.svg +++ b/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/mixedsubplot.svg @@ -38,63 +38,63 @@ C -2.683901 -1.55874 -3 -0.795609 -3 0 C -3 0.795609 -2.683901 1.55874 -2.12132 2.12132 C -1.55874 2.683901 -0.795609 3 0 3 z -" id="ma3acfec232" style="stroke:#000000;stroke-width:0.5;"/> +" id="m54e3ad5445" style="stroke:#000000;stroke-width:0.5;"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - @@ -247,105 +247,105 @@ L 36 57.6 +" id="m368fc901b1" style="stroke:#000000;stroke-width:0.5;"/> - + +" id="mc63e59a608" style="stroke:#000000;stroke-width:0.5;"/> - + - - + - + - - + - + - - + - + - - + - + - - + - + @@ -353,7 +353,7 @@ L 259.2 57.6 - @@ -361,173 +361,173 @@ L 259.2 267.054545 +" id="m556f96d829" style="stroke:#000000;stroke-width:0.5;"/> - + +" id="m27e32ca04a" style="stroke:#000000;stroke-width:0.5;"/> - + - - + - + - - + - + - - + - + - - + - + - - + - + - - + - + - - + - + - - + - + - - + - + @@ -806,10661 +806,9140 @@ L 239.00999 350.94521 - - + - + - - + - + - - + - + - + + - - + - + - + - + + - + - + - + - - + - + - + - + - + - + - - + - + - + - + - + - - + - + - + - + - + - + - + - + - + - + - + - + - + - - + - - + - + - + + - - - - - + + - + - + - - + - + - + + - + - + - + - - + - + + + - - + + - + - - - + - + - - - + - + - + - - - + - + - + + - - - + - + + - + + - - + - + + - - + - + - + - + - + - + - + - + + - + - - - + + + - + + - + - + - + - - - - - - - + - + + - + - + - - + - + - + - + - + - + - + - + + - + - + + - + - - - + - + - + - + - - - + - + + - + + - - + - + - + - + + - - - + - + - + - - + - + + - - - + - + - + + - + - + - + + - - + - + + - - + - + - - - + - + - + - - + - + - + - + + - + - + + - - + - + - + - + - - + - - + - + - + - + - + - + - + - + + + - + - + - + - + - + + - + + - + - + - + - + - + - + - + - + - - - - + - + - + - + - + + - + + - - - - - - + - + - + + - + - + - - - - + - + - + + - + - + - + - - - + - + - + - + - + + + - + - + + - + - + + - + - + - + - + - + - + - + - + - + + - + + + + - + - - + - + - + - + - + - - + - + - + - + - + + - + + - + - + - + - - + - + + + + - + - + + - + - + - - - + - - + - - + - - - - + - - - - - - + - - + - + - + - + - + - + - + + - + + + - + + + - + - + - + - + + + + - + + + - - + - - - - + - + - + - + - + + + - - + + + - + - + - - - + - + - + + - - - + - + - + + - - + - + - + - - - + - + - + - + - + - + - + - + + - + - - - - - - - - + - + + + - + - + - - + - - - + - + - - - - - + - + - + + - - - - - - - - - + - + - + - + - + - + + - + + + - - + + + + - - - + + + + + + + - + + - + - + - + + + - + + - + + + - - - + - + - + + - + - - + - + - + - + - + + - + - - - - - + - + - + - + - - - - - - + - + - - - + + + - + - + - + - + - + - + + + + - + - + - + + - + + - + - + - + + + + - - + - - + - + - + - + - - - + - + - + - - - - - + - - - - - - - - - + - + - + - + + - + - - + - + - + - + - + - + - + - + - + - + + - + - + - - - - - - + - + - + - - - - + + + - + - + - + + - + + - - - - + - + - + - + - + + + + - + + - - - - + - - + - + + + - - + - + - - + - + - + + - + - + + - - - + - + - + - + - + + + - - + - + - + - + + - - + - + - + - + - - + - + - + - + - + - + - + - + + + - - - + - + - - - + + + + - + - - + + - + + - - - - + - + - - - - - + - - + - + - + - + - + - - + + + - - - - - + - - + + - - + - + + + + - + + + - + - + - + - + - - + - + + + - + - + + - + - + + - + - + - + - + - + - + - + - + + - + + - - - - - + - - - + - + - + - + - + - + + - + + + - - + - + - + - - + - + + - - - + - + - + - + - + - + - + - - + - + - + - + + - + + + - - + - + - + + + - - + - + + - - + - + - + - + + - + - + + - - - + - + - + - - - - - + - + - + + - - - - - + - + - + - + + - - + - + - + + + + - - + - + + - - + - + - + - - + - + - + - + + - - - - + - + - + - - - - + - - - + - + + - + + + + - + + - - + - + - + - + - + - + - + - + - + + - + - + - + - + - + + - + - + - + - - - - + - + - + - + + + + + - + + + + - - + - + + + + + + + - + + + - + + + - + - + - - + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - - - - + - + - - - - - - - - + - + - + - + - + - + + + - + - + - + - + + - + - + - + - + - + - - - + - + - + - + + + - + + - - - - + - + - - - + - + - - + - + - + - + - + - + + + + + + - - + - + - - + - + - + - + - - + - - + - + - + - - + - + - + - + - + + - - - - - - - + - - + - + - + - + - + - + - + - + - + - + - + - + + + - + - + - + + - - + - - + - + - + + + - - - + - - + - + - + - - - + - + - + - + + + + + - - - + - + - + - + - + + + + + + - + - + + - + + + + + - - - - + - + - + - - + - + - - + - - - - + - - + - - - + - + - + - + - + - + - - - + - + + + - - + + - + - + - + - - + - + - + - + + - + - + + + + - + - + - + - - - - - - - + - + + - + + - + - + - + - + - + - + + + - - + - + - + - + - + - + - - + - + - + - + - + + + + - + - + - + + - + - + - + - - - - - - - + - + + + + + - + - + + + + + + + - - - + - + - + - + - - - + - + - + - + - + - + + - - - - + - + - + - + - + + + + + + - + - - + - + - + - + - - - + - + - + - + - + - - - - - + - + - + - - + + + + + + + + - + - + + + + - + - + - + - + - + - + - - + - - - - - - - + - + - + - + - + - + - + - + - + + - + - + + + - + + - + + + - - - + - + - + - + - + - - + - + + + + - - + - + - + - - - - - - - + - + - - - - - + - + - + - + - + - - + - - - + - + - + - + + - - - - - + - + - + - + - - + - + - + - + - - + - + + - - - - + - + - + + + + + - + - + - + + - + - + - + + - + - + - + - + - + - + - + - + - + - + + + - + - + - + - + + - - - + - + - - + - + - + - + - + - + - + - + - + - + - + - + - - + - - + - + - + - - - - + - + - + - - - - - - + - + - + - + - + - + - - - - - + - + - + - + - + - + - + - + - + - + + + + + - + - + - + + + + + - - + - + + + + - + - + - + - + - + - + - + - - + - + - + + - - - - - - - + - + - - - - - - - - - + - + + - + + + + + + + - + + + - - + - - - + - + - + - + - + - + - + - + - - - - + - + - + - + - + + - - - - + - + - - + - + - + - + - + - - + - + - + - + - + + - + - + - + - + + - + - + - + + - + + + + + - - + - - + - + - - + - + - + - + - + - - + - + - + + - - + - - + - + + - + + + + - + + + - - - - - + - + - + + + - - + - + - - - - + - - + - - - + - + - - - - - - + - + - + - + + - + - + - + - + - + - + + - - + - + - + + - - + - + - + - + - + - + - + - + - - + - + - - - - + - - + + - + + + - + - + - + + - + + - - + - + - - + - + - + - + - + - + - + - + - + - + - + - + - + + + + - + - + - + - + - + + - + - + + - + + - + + + - - + - - - - - - - + - + + - + - + - - + - + - + - - - + - + - + - + - + + - + - + - + - - - + - + + + - + + + + + - + + + - - + - + - - - - + - + - - + - - + + - + + + - + - + + - + - + - + - + - - - - - + - + - - + - + + + - + + - + + - + - + - + + - + + - + - + - - - - - + - - - - + - + - + - + + + - + - - - - + + - - + - + - + + + - + - + - + - + - + - + - - + - + - + - + - + - + - + - + + + - + - + - - - + - + - - + - - + - + - + + - + + - + - - + - + - + - - + - + + - + - + + - + - + - + - + - + - + - + - + - + - + - + - + - + +" style="fill:#0000bf;"/> - + - + diff --git a/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/surface3d.pdf b/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/surface3d.pdf index 2963a1abf39f..3642d55a85e9 100644 Binary files a/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/surface3d.pdf and b/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/surface3d.pdf differ diff --git a/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/surface3d.png b/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/surface3d.png index d9202e468d42..e9dfe54e3c1c 100644 Binary files a/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/surface3d.png and b/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/surface3d.png differ diff --git a/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/surface3d.svg b/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/surface3d.svg index c157b63179f5..3c9fd9909147 100644 --- a/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/surface3d.svg +++ b/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/surface3d.svg @@ -290,10658 +290,9137 @@ L 396.78066 113.332431 - - - - - - + - + - - + - + - - - + - + - - - - - + - - - - - - - - + - - - + + - + - - - - - - - - - - + - + - - + - - + - - - - + - - - - - - + - - + - - + - - + - + - - - - - - - + - + + - - + - + - + - - + - - - + - - + - + + - - - - - - + - + - + - + - + - + - + - + - - + - - - - + - - - - - - - + - + + + + - + - + - - + - + + + - - - - + - - - - + + - + - - - + - + - + + - + - + - - + + - + - + - - - + - - - + - + - - + - + - - - + - - - + - - + - - + - + + - + - - + - + - + + - + - + - - - - + - + - + + - + + - - - + - + - + - + - + - + - + + - + + + - - + - + - - - - - - + - + - - + - - - + - + - - + - - - + - - - + + + - + - - - + - - - - + - + - + - + - + - + + + - - + - - + - - - + - + - - + - + + - + + - - + + + + + - + - + - + + - - + + - - - - - - - - - - - - - - + - - + + + - - - + + - + + + - - + - + - + - + + - + - + - + - - + - + - - - + + + - - - - - + - + + + + - - + - + - + + - - + - + - + + + - + - + - + - + - - - + - + - + - - - - + + - + - + + + - + - - + - + - + - + - + - + - - - - + - - - + - + + - + - - - + - + - + + - - + + + - + - - + - + - + - + + + - - - + - + - + + + - + - + - - - - + - + + - + - - - + - + + - + - - - - + - + - - + - + - - - - - - + - + - + + - + - + + - + + + - + + - + - + + + - + - + - + - - + + + - - + - + - + - + - + + - + + - + + + - - + - + - + - + - + - + - - - + - + - + - + - + - + - + - + - - - + - + - + - + - + - + - - - + - + + + - - + - - + + + - + - + - - + - + - - - - - + - + - - + - - + - + - + + - + - + - - - + - + - - + - + - - + - + - + + - + - + - + - + - + - - + - + - + + - + + + + - + + + - - + - - + - + + + + + - + + - + - + - + - + - - + - + - + - + - - + - + - + - + - + + - + - - - - - + - - + - + - + - + + + + + + + - + + - + - + - + - - + - + - + - + - + + - - + - + - + - + - + - + - + - + - - - + - + - - + - - - + - + - + - + - + - + - - + - - + - + + - + - + + + + + - + - - - - - + - + - - - - - - - - - + - - - - + - + - - - - - - + - + - + - + - + - + - + - + - + - - - - - - - + - + + - + - + - + - - + - + - + - + - + - + - + - + - + + + + - + - + - + - + - + + + + - + - + - + - - - - + - + - + - + + + + + + - + - + - + - + - + - + + - + - + + + + - + + + + - + + - + + + - + - + - - - - - - - - + - - + - - + - + - + - - - - + - + - + - + - + + + - - + - + - + - + - + + - + - + - + - + - + - + - - + - + - + - + - - - - - - - + - + - + + - - + - + - + - + - + + - + - - - - + - - - + - + - + - - + - + - + - + - + - + - + - - - + - + - + - - + - + - + - + - + - + - - - + - + - + - + - - + - + - + - + + - + - + - + + - - + + - + - + - + - + - + + + - + - + - + - + + - + + + + + + - - - + + - - + + - + + + - - + - + - + - + - + - + - + + - + - + - + - + + + + - + - - - - - - - + - + - + - - - - - + - - + - + - + - + - + - - - - + - + - - + - + - + - + - - - + - + - + - - - + + + + - + - + - + - + - + - + - + + - + - + - - + - + - + - + - + - + - + + - + + + + + + + - + + + + - - + - + + - - + - - + + + + + - + + - + - + + - + - - - - + - - - + - + - + - + - + - + + - - - + - - - - - - - - + - + - + - + - + - - + - + - + - + - + - + - + - - - + - + + + - - - - - + - + - + - + - + - + + + + + + - - + - + - - + + - + + - + - - + - + - + - + - - + - - - - - - - + - + + - - + - + + + - + - + - + - - + - + + - + + - + + + + + + + - + - + - + - - - - + - + - - - - + - + - - - - + + - - - - - - + - + - + + + + + + + - + - - - + - - - - - + - + - - - + - - + - - - - - - + - + - - + + - + - - - - - + + + + - - + + + - - - + + + - - + - + - + + + - - - + + + + - + - + - - - - - - + - - + - + - - + + + + - - - + - - + - + - - + - + - + - + - + + + - - + - + - + - + - + - - + - + - + + + - + - + - + - - + - + - + - + - + - + + - + - - - + - - + - - - - - - - + - + - - - - - + - - - - - - + - + - + - - - - - - + - + - - + + + + + + - - - - - + + - - + - + + - + + - - + - - - + - - + - + - - + + - + - - + - + - - + - + - + - + - + + + - + - + + + - + - + - + - + - + - + - + - + - + - - + + + + + - + + + - - + - - - - + - + - - - - + - + - - - - - - - - + - - - + - + - + - - - - + - + - + - + - + + + + + + + - - + - + - - + - - + - - + - + - + + - + - + + + + + - + - - - - + - - - - - - + - - - - - - - - - + - + - + + + + - + - - - + - - + - - + - + + + - + - - + + + + + - - - - + - + - + + + - + - + - + - + - + - + - - - - - + - + - + - + + - + - - - + - + - + - + - + - + + - + - - + - + - + + + + - + + - - - - - - + - + - - + - + - + - - - + - + + + - + - - - - - - - - - + - + - + + + + - + - + - + + - + - - + - + - - + - - - - + - + - + - + - - + - + - + - + - + - + + + - + - - + - + - + - + + + + + + - + - + - - + - + - + + - + - - + - + - + - + - + - + + + + + + - - - + - - - + + - + + + - - + - + - + - + - - + - - - - - + - - - - - - - + - + + - - + - - - + - - - - - + - + - + - - - + - - - - - + - + - + + + - - + - + - + - + - + + - + - + - + + - + - + - + - + + + - - + - + - + + - + - + + - + - - - + + - - - + - + - + + - + - - + - + + - + - + - + - + - - - - + - + - - - + - - - + - - + - - - - + - + - + - + - + + + - + - - - + + - + - + + + - + + - + - + - + - - + - + - - - - - - - - + - + + + - - + - + - + + - - + - - - - + - + - - + - + - + - + + + - + + + + + - - + - + - + - - + - - - - - + - + - - - - + - - + - - + - - - + - + + - - + - + + + - - + - + + - + + - + - - + - + - + - - - + - + - + - + - - - + - + - + - + - + + - + - - - - - + + - - + - - + - + - + - + - + - - - + - - + - + - + + - - - + - - - - - + + - + - - - - - + - - + - - - - - + - - - + + + - + - - - - + - + - + - - - - - - - - + - - @@ -10974,66 +9452,66 @@ z +" id="m27e32ca04a" style="stroke:#000000;stroke-width:0.5;"/> - + - + - + - + - + - + - + - + - + @@ -11041,10 +9519,10 @@ L -4 0 - + - + 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 new file mode 100644 index 000000000000..56bc9db7ec96 Binary files /dev/null and b/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/surface3d_shaded.png differ diff --git a/lib/mpl_toolkits/tests/test_mplot3d.py b/lib/mpl_toolkits/tests/test_mplot3d.py index 18a6a896fd83..71bcb2a45185 100644 --- a/lib/mpl_toolkits/tests/test_mplot3d.py +++ b/lib/mpl_toolkits/tests/test_mplot3d.py @@ -201,6 +201,21 @@ def test_surface3d(): fig.colorbar(surf, shrink=0.5, aspect=5) +@image_comparison(baseline_images=['surface3d_shaded'], remove_text=True, + extensions=['png']) +def test_surface3d_shaded(): + fig = plt.figure() + ax = fig.gca(projection='3d') + X = np.arange(-5, 5, 0.25) + Y = np.arange(-5, 5, 0.25) + X, Y = np.meshgrid(X, Y) + R = np.sqrt(X ** 2 + Y ** 2) + Z = np.sin(R) + surf = ax.plot_surface(X, Y, Z, rstride=5, cstride=5, + color=[0.25, 1, 0.25], lw=1, antialiased=False) + ax.set_zlim(-1.01, 1.01) + + @image_comparison(baseline_images=['text3d']) def test_text3d(): fig = plt.figure() 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