diff --git a/lib/mpl_toolkits/mplot3d/art3d.py b/lib/mpl_toolkits/mplot3d/art3d.py index 3ed61a844996..20285ee516f4 100644 --- a/lib/mpl_toolkits/mplot3d/art3d.py +++ b/lib/mpl_toolkits/mplot3d/art3d.py @@ -191,8 +191,12 @@ def path_to_3d_segment_with_codes(path, zs=0, zdir='z'): zs = np.broadcast_to(zs, len(path)) pathsegs = path.iter_segments(simplify=False, curves=False) seg_codes = [((x, y, z), code) for ((x, y), code), z in zip(pathsegs, zs)] - seg, codes = zip(*seg_codes) - seg3d = [juggle_axes(x, y, z, zdir) for (x, y, z) in seg] + if seg_codes: + seg, codes = zip(*seg_codes) + seg3d = [juggle_axes(x, y, z, zdir) for (x, y, z) in seg] + else: + seg3d = [] + codes = [] return seg3d, list(codes) @@ -204,7 +208,10 @@ def paths_to_3d_segments_with_codes(paths, zs=0, zdir='z'): zs = np.broadcast_to(zs, len(paths)) segments_codes = [path_to_3d_segment_with_codes(path, pathz, zdir) for path, pathz in zip(paths, zs)] - segments, codes = zip(*segments_codes) + if segments_codes: + segments, codes = zip(*segments_codes) + else: + segments, codes = [], [] return list(segments), list(codes) diff --git a/lib/mpl_toolkits/tests/test_mplot3d.py b/lib/mpl_toolkits/tests/test_mplot3d.py index 34fe4eaafb2a..f60cfa5c4186 100644 --- a/lib/mpl_toolkits/tests/test_mplot3d.py +++ b/lib/mpl_toolkits/tests/test_mplot3d.py @@ -3,7 +3,7 @@ from mpl_toolkits.mplot3d import Axes3D, axes3d, proj3d, art3d from matplotlib import cm from matplotlib.testing.decorators import image_comparison, check_figures_equal -from matplotlib.collections import LineCollection +from matplotlib.collections import LineCollection, PolyCollection from matplotlib.patches import Circle import matplotlib.pyplot as plt import numpy as np @@ -440,6 +440,13 @@ def test_poly3dcollection_closed(): ax.add_collection3d(c2) +def test_poly_collection_2d_to_3d_empty(): + poly = PolyCollection([]) + art3d.poly_collection_2d_to_3d(poly) + assert isinstance(poly, art3d.Poly3DCollection) + assert poly.get_paths() == [] + + @image_comparison(baseline_images=['axes3d_labelpad'], extensions=['png']) def test_axes3d_labelpad(): from matplotlib import rcParams