From 0d4b3c76f36aad81d563c3abd605b12102e66b82 Mon Sep 17 00:00:00 2001 From: stone Date: Mon, 5 Mar 2018 13:44:35 -0500 Subject: [PATCH 1/3] fix for 9725 --- lib/mpl_toolkits/mplot3d/art3d.py | 28 ++++++++++++++++-- .../scatter_face_color_change.png | Bin 0 -> 44314 bytes lib/mpl_toolkits/tests/test_mplot3d.py | 10 +++++++ 3 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 lib/mpl_toolkits/tests/baseline_images/test_mplot3d/scatter_face_color_change.png diff --git a/lib/mpl_toolkits/mplot3d/art3d.py b/lib/mpl_toolkits/mplot3d/art3d.py index 39727ca60614..bbf88a254a56 100644 --- a/lib/mpl_toolkits/mplot3d/art3d.py +++ b/lib/mpl_toolkits/mplot3d/art3d.py @@ -449,6 +449,30 @@ def set_3d_properties(self, zs, zdir): self._edgecolor3d = self.get_edgecolor() self.stale = True + def set_facecolor(self, colors): + + PathCollection.set_facecolor(self, colors) + self._facecolor3d = PathCollection.get_facecolor(self) + try: + # Will update edge color together if it follows facecolor + if (isinstance(self._edgecolors, six.string_types) + and self._edgecolors == str('face')): + self.set_edgecolor(colors) + except AttributeError: + pass + set_facecolors = set_facecolor + + def set_edgecolor(self, colors): + PathCollection.set_edgecolor(self, colors) + self._edgecolor3d = PathCollection.get_edgecolor(self) + set_edgecolors = set_edgecolor + + def set_facecolors_on_project(self, colors): + PathCollection.set_facecolor(self, colors) + + def set_edgecolors_on_project(self, colors): + PathCollection.set_edgecolor(self, colors) + def do_3d_projection(self, renderer): xs, ys, zs = self._offsets3d vxs, vys, vzs, vis = proj3d.proj_transform_clip(xs, ys, zs, renderer.M) @@ -456,12 +480,12 @@ def do_3d_projection(self, renderer): fcs = (zalpha(self._facecolor3d, vzs) if self._depthshade else self._facecolor3d) fcs = mcolors.to_rgba_array(fcs, self._alpha) - self.set_facecolors(fcs) + self.set_facecolors_on_project(fcs) ecs = (zalpha(self._edgecolor3d, vzs) if self._depthshade else self._edgecolor3d) ecs = mcolors.to_rgba_array(ecs, self._alpha) - self.set_edgecolors(ecs) + self.set_edgecolors_on_project(ecs) PathCollection.set_offsets(self, np.column_stack([vxs, vys])) if vzs.size > 0 : diff --git a/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/scatter_face_color_change.png b/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/scatter_face_color_change.png new file mode 100644 index 0000000000000000000000000000000000000000..3de79ab4140e5e973e08a278f3f34d5aa2850ca8 GIT binary patch literal 44314 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 literal 0 HcmV?d00001 diff --git a/lib/mpl_toolkits/tests/test_mplot3d.py b/lib/mpl_toolkits/tests/test_mplot3d.py index 31dc5a40ed79..788ff17f8902 100644 --- a/lib/mpl_toolkits/tests/test_mplot3d.py +++ b/lib/mpl_toolkits/tests/test_mplot3d.py @@ -174,6 +174,16 @@ def test_scatter3d_color(): ax.scatter(np.arange(10, 20), np.arange(10, 20), np.arange(10, 20), color='b', marker='s') +@image_comparison(baseline_images = ['scatter_face_color_change'], + remove_text=True, extensions=['png']) +def test_scatter_face_color_change(): + # Take the test data from above, although size does not matter here + fig = plt.figure() + ax = fig.add_subplot(111, projection='3d') + scat = ax.scatter(np.arange(10), np.arange(10), np.arange(10), + facecolors="red") + # changes facecolor, it should also change edgecolor when displayed + scat.set_facecolors("green") @image_comparison(baseline_images=['surface3d'], remove_text=True) def test_surface3d(): From 27d9699d95de354b68a6e2cef42df8e43c5255c9 Mon Sep 17 00:00:00 2001 From: stone Date: Mon, 5 Mar 2018 14:12:22 -0500 Subject: [PATCH 2/3] Add: 1. PEP8 compliant 2. 1 more test case 3. doc for new methods --- lib/mpl_toolkits/mplot3d/art3d.py | 49 ++++++++++++------ .../scatter_edgecolor_nochange.png | Bin 0 -> 44392 bytes lib/mpl_toolkits/tests/test_mplot3d.py | 46 +++++++++++----- 3 files changed, 66 insertions(+), 29 deletions(-) create mode 100644 lib/mpl_toolkits/tests/baseline_images/test_mplot3d/scatter_edgecolor_nochange.png diff --git a/lib/mpl_toolkits/mplot3d/art3d.py b/lib/mpl_toolkits/mplot3d/art3d.py index bbf88a254a56..c086b0e31f08 100644 --- a/lib/mpl_toolkits/mplot3d/art3d.py +++ b/lib/mpl_toolkits/mplot3d/art3d.py @@ -84,7 +84,7 @@ def draw(self, renderer): [self._position3d, self._position3d + self._dir_vec], renderer.M) dx = proj[0][1] - proj[0][0] dy = proj[1][1] - proj[1][0] - if dx==0. and dy==0.: + if dx == 0. and dy == 0.: # atan2 raises ValueError: math domain error on 0,0 angle = 0. else: @@ -200,7 +200,8 @@ class Line3DCollection(LineCollection): def __init__(self, segments, *args, **kwargs): ''' - Keyword arguments are passed onto :func:`~matplotlib.collections.LineCollection`. + Keyword arguments are passed onto + :func:`~matplotlib.collections.LineCollection`. ''' LineCollection.__init__(self, segments, *args, **kwargs) @@ -309,7 +310,7 @@ def do_3d_projection(self, renderer): def get_patch_verts(patch): """Return a list of vertices for the path of a patch.""" trans = patch.get_patch_transform() - path = patch.get_path() + path = patch.get_path() polygons = path.to_polygons(trans) if len(polygons): return polygons[0] @@ -450,27 +451,39 @@ def set_3d_properties(self, zs, zdir): self.stale = True def set_facecolor(self, colors): - + # override setter for facecolor so that 3dfacecolor + # will be updated as well. + # In providing consitentcy in 2dcolor and 3dcolor setter. + # Note: will also update edgecolor if it follows facecolor + PathCollection.set_facecolor(self, colors) self._facecolor3d = PathCollection.get_facecolor(self) try: # Will update edge color together if it follows facecolor - if (isinstance(self._edgecolors, six.string_types) - and self._edgecolors == str('face')): - self.set_edgecolor(colors) + if (isinstance(self._edgecolors, six.string_types) and + self._edgecolors == str('face')): + self.set_edgecolor(colors) except AttributeError: pass set_facecolors = set_facecolor def set_edgecolor(self, colors): + # override setter for edgecolor so that 3dedgecolor + # will be updated as well. + # In providing consitentcy in 2dcolor and 3dcolor setter. + PathCollection.set_edgecolor(self, colors) self._edgecolor3d = PathCollection.get_edgecolor(self) set_edgecolors = set_edgecolor - def set_facecolors_on_project(self, colors): + def _set_facecolors_on_project(self, colors): + # A sepearted method that changes edgecolor in drawing + # as in this case, we dont change 3d facecolor PathCollection.set_facecolor(self, colors) - def set_edgecolors_on_project(self, colors): + def _set_edgecolors_on_project(self, colors): + # A sepearted method that changes edgecolor in drawing + # as in this case, we dont change 3d edgecolor PathCollection.set_edgecolor(self, colors) def do_3d_projection(self, renderer): @@ -480,17 +493,19 @@ def do_3d_projection(self, renderer): fcs = (zalpha(self._facecolor3d, vzs) if self._depthshade else self._facecolor3d) fcs = mcolors.to_rgba_array(fcs, self._alpha) - self.set_facecolors_on_project(fcs) + # now uses setter on project + self._set_facecolors_on_project(fcs) ecs = (zalpha(self._edgecolor3d, vzs) if self._depthshade else self._edgecolor3d) ecs = mcolors.to_rgba_array(ecs, self._alpha) - self.set_edgecolors_on_project(ecs) + # now uses setter on project + self._set_edgecolors_on_project(ecs) PathCollection.set_offsets(self, np.column_stack([vxs, vys])) - if vzs.size > 0 : + if vzs.size > 0: return min(vzs) - else : + else: return np.nan @@ -585,7 +600,7 @@ def get_vector(self, segments3d): if len(segments3d): xs, ys, zs = zip(*points) - else : + else: # We need this so that we can skip the bad unpacking from zip() xs, ys, zs = [], [], [] @@ -619,7 +634,7 @@ def set_3d_properties(self): self._alpha3d = PolyCollection.get_alpha(self) self.stale = True - def set_sort_zpos(self,val): + def set_sort_zpos(self, val): '''Set the position to use for z-sorting.''' self._sort_zpos = val self.stale = True @@ -676,12 +691,12 @@ def do_3d_projection(self, renderer): zvec = np.array([[0], [0], [self._sort_zpos], [1]]) ztrans = proj3d.proj_transform_vec(zvec, renderer.M) return ztrans[2][0] - elif tzs.size > 0 : + elif tzs.size > 0: # FIXME: Some results still don't look quite right. # In particular, examine contourf3d_demo2.py # with az = -54 and elev = -45. return np.min(tzs) - else : + else: return np.nan def set_facecolor(self, colors): diff --git a/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/scatter_edgecolor_nochange.png b/lib/mpl_toolkits/tests/baseline_images/test_mplot3d/scatter_edgecolor_nochange.png new file mode 100644 index 0000000000000000000000000000000000000000..31e73a3d9dea0416a2f438d9b1b83d5522e05216 GIT binary patch literal 44392 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 literal 0 HcmV?d00001 diff --git a/lib/mpl_toolkits/tests/test_mplot3d.py b/lib/mpl_toolkits/tests/test_mplot3d.py index 788ff17f8902..3cbb2ed6be2b 100644 --- a/lib/mpl_toolkits/tests/test_mplot3d.py +++ b/lib/mpl_toolkits/tests/test_mplot3d.py @@ -174,10 +174,11 @@ def test_scatter3d_color(): ax.scatter(np.arange(10, 20), np.arange(10, 20), np.arange(10, 20), color='b', marker='s') -@image_comparison(baseline_images = ['scatter_face_color_change'], + +@image_comparison(baseline_images=['scatter_face_color_change'], remove_text=True, extensions=['png']) def test_scatter_face_color_change(): - # Take the test data from above, although size does not matter here + # Take the test data from above fig = plt.figure() ax = fig.add_subplot(111, projection='3d') scat = ax.scatter(np.arange(10), np.arange(10), np.arange(10), @@ -185,6 +186,21 @@ def test_scatter_face_color_change(): # changes facecolor, it should also change edgecolor when displayed scat.set_facecolors("green") + +@image_comparison(baseline_images=['scatter_edgecolor_nochange'], + remove_text=True, extensions=['png']) +def test_scatter_edgecolor_nochange(): + # test to ensure edge color is not updated with facecolor if it + # is set at the beginning + # Take the test data from above + fig = plt.figure() + ax = fig.add_subplot(111, projection='3d') + scat = ax.scatter(np.arange(10), np.arange(10), np.arange(10), + facecolors="red", edgecolors="blue") + # changes facecolor, it should not change edgecolor when displayed + scat.set_edgecolors("green") + + @image_comparison(baseline_images=['surface3d'], remove_text=True) def test_surface3d(): fig = plt.figure() @@ -315,10 +331,11 @@ def test_quiver3d(): u = np.sin(np.pi * x) * np.cos(np.pi * y) * np.cos(np.pi * z) v = -np.cos(np.pi * x) * np.sin(np.pi * y) * np.cos(np.pi * z) w = (np.sqrt(2.0 / 3.0) * np.cos(np.pi * x) * np.cos(np.pi * y) * - np.sin(np.pi * z)) + np.sin(np.pi * z)) ax.quiver(x, y, z, u, v, w, length=0.1, pivot='tip', normalize=True) + @image_comparison(baseline_images=['quiver3d_empty'], remove_text=True) def test_quiver3d_empty(): fig = plt.figure() @@ -329,10 +346,11 @@ def test_quiver3d_empty(): u = np.sin(np.pi * x) * np.cos(np.pi * y) * np.cos(np.pi * z) v = -np.cos(np.pi * x) * np.sin(np.pi * y) * np.cos(np.pi * z) w = (np.sqrt(2.0 / 3.0) * np.cos(np.pi * x) * np.cos(np.pi * y) * - np.sin(np.pi * z)) + np.sin(np.pi * z)) ax.quiver(x, y, z, u, v, w, length=0.1, pivot='tip', normalize=True) + @image_comparison(baseline_images=['quiver3d_masked'], remove_text=True) def test_quiver3d_masked(): fig = plt.figure() @@ -345,12 +363,13 @@ def test_quiver3d_masked(): u = np.sin(np.pi * x) * np.cos(np.pi * y) * np.cos(np.pi * z) v = -np.cos(np.pi * x) * np.sin(np.pi * y) * np.cos(np.pi * z) w = (np.sqrt(2.0 / 3.0) * np.cos(np.pi * x) * np.cos(np.pi * y) * - np.sin(np.pi * z)) + np.sin(np.pi * z)) u = np.ma.masked_where((-0.4 < x) & (x < 0.1), u, copy=False) v = np.ma.masked_where((0.1 < y) & (y < 0.7), v, copy=False) ax.quiver(x, y, z, u, v, w, length=0.1, pivot='tip', normalize=True) + @image_comparison(baseline_images=['quiver3d_pivot_middle'], remove_text=True, extensions=['png']) def test_quiver3d_pivot_middle(): @@ -362,10 +381,11 @@ def test_quiver3d_pivot_middle(): u = np.sin(np.pi * x) * np.cos(np.pi * y) * np.cos(np.pi * z) v = -np.cos(np.pi * x) * np.sin(np.pi * y) * np.cos(np.pi * z) w = (np.sqrt(2.0 / 3.0) * np.cos(np.pi * x) * np.cos(np.pi * y) * - np.sin(np.pi * z)) + np.sin(np.pi * z)) ax.quiver(x, y, z, u, v, w, length=0.1, pivot='middle', normalize=True) + @image_comparison(baseline_images=['quiver3d_pivot_tail'], remove_text=True, extensions=['png']) def test_quiver3d_pivot_tail(): @@ -377,7 +397,7 @@ def test_quiver3d_pivot_tail(): u = np.sin(np.pi * x) * np.cos(np.pi * y) * np.cos(np.pi * z) v = -np.cos(np.pi * x) * np.sin(np.pi * y) * np.cos(np.pi * z) w = (np.sqrt(2.0 / 3.0) * np.cos(np.pi * x) * np.cos(np.pi * y) * - np.sin(np.pi * z)) + np.sin(np.pi * z)) ax.quiver(x, y, z, u, v, w, length=0.1, pivot='tail', normalize=True) @@ -424,17 +444,18 @@ def test_axes3d_labelpad(): def test_axes3d_cla(): # fixed in pull request 4553 fig = plt.figure() - ax = fig.add_subplot(1,1,1, projection='3d') + ax = fig.add_subplot(1, 1, 1, projection='3d') ax.set_axis_off() ax.cla() # make sure the axis displayed is 3D (not 2D) + def test_plotsurface_1d_raises(): x = np.linspace(0.5, 10, num=100) y = np.linspace(0.5, 10, num=100) X, Y = np.meshgrid(x, y) z = np.random.randn(100) - fig = plt.figure(figsize=(14,6)) + fig = plt.figure(figsize=(14, 6)) ax = fig.add_subplot(1, 2, 1, projection='3d') with pytest.raises(ValueError): ax.plot_surface(X, Y, z) @@ -533,6 +554,7 @@ def test_proj_axes_cube_ortho(): ax.set_xlim(-200, 200) ax.set_ylim(-200, 200) + def test_rot(): V = [1, 0, 0, 1] rotated_V = proj3d.rot_x(V, np.pi / 6) @@ -673,9 +695,9 @@ def test_rgb_data(self): x, y, z = np.indices((10, 10, 10)) voxels = (x == y) | (y == z) colors = np.zeros((10, 10, 10, 3)) - colors[...,0] = x/9.0 - colors[...,1] = y/9.0 - colors[...,2] = z/9.0 + colors[..., 0] = x/9.0 + colors[..., 1] = y/9.0 + colors[..., 2] = z/9.0 ax.voxels(voxels, facecolors=colors) @image_comparison( From 22c2d62d5e7322a61f187b393a27b01a121932d3 Mon Sep 17 00:00:00 2001 From: stone Date: Mon, 5 Mar 2018 18:22:39 -0500 Subject: [PATCH 3/3] Fix naming convention and docstring --- lib/mpl_toolkits/mplot3d/art3d.py | 46 ++++++++++++++++++------------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/lib/mpl_toolkits/mplot3d/art3d.py b/lib/mpl_toolkits/mplot3d/art3d.py index c086b0e31f08..bdb05754dbe2 100644 --- a/lib/mpl_toolkits/mplot3d/art3d.py +++ b/lib/mpl_toolkits/mplot3d/art3d.py @@ -451,10 +451,12 @@ def set_3d_properties(self, zs, zdir): self.stale = True def set_facecolor(self, colors): - # override setter for facecolor so that 3dfacecolor - # will be updated as well. - # In providing consitentcy in 2dcolor and 3dcolor setter. - # Note: will also update edgecolor if it follows facecolor + ''' + Override setter for facecolor so that 3dfacecolor + will be updated as well. + In providing consitentcy in 2dcolor and 3dcolor setter. + Note: will also update edgecolor if it follows facecolor + ''' PathCollection.set_facecolor(self, colors) self._facecolor3d = PathCollection.get_facecolor(self) @@ -468,23 +470,31 @@ def set_facecolor(self, colors): set_facecolors = set_facecolor def set_edgecolor(self, colors): - # override setter for edgecolor so that 3dedgecolor - # will be updated as well. - # In providing consitentcy in 2dcolor and 3dcolor setter. + ''' + Override setter for edgecolor so that 3dedgecolor + will be updated as well. + In providing consitentcy in 2dcolor and 3dcolor setter. + ''' PathCollection.set_edgecolor(self, colors) self._edgecolor3d = PathCollection.get_edgecolor(self) set_edgecolors = set_edgecolor - def _set_facecolors_on_project(self, colors): - # A sepearted method that changes edgecolor in drawing - # as in this case, we dont change 3d facecolor - PathCollection.set_facecolor(self, colors) + def _set_facecolor_on_projection(self, color): + ''' + A sepearted method that changes edgecolor in drawing + as in this case, we dont change 3d facecolor + ''' - def _set_edgecolors_on_project(self, colors): - # A sepearted method that changes edgecolor in drawing - # as in this case, we dont change 3d edgecolor - PathCollection.set_edgecolor(self, colors) + super().set_facecolor(color) + + def _set_edgecolor_on_projection(self, color): + ''' + A sepearted method that changes edgecolor in drawing + as in this case, we dont change 3d edgecolor + ''' + + super().set_edgecolor(color) def do_3d_projection(self, renderer): xs, ys, zs = self._offsets3d @@ -493,14 +503,12 @@ def do_3d_projection(self, renderer): fcs = (zalpha(self._facecolor3d, vzs) if self._depthshade else self._facecolor3d) fcs = mcolors.to_rgba_array(fcs, self._alpha) - # now uses setter on project - self._set_facecolors_on_project(fcs) + self._set_facecolor_on_projection(fcs) ecs = (zalpha(self._edgecolor3d, vzs) if self._depthshade else self._edgecolor3d) ecs = mcolors.to_rgba_array(ecs, self._alpha) - # now uses setter on project - self._set_edgecolors_on_project(ecs) + self._set_edgecolor_on_projection(ecs) PathCollection.set_offsets(self, np.column_stack([vxs, vys])) if vzs.size > 0: