<h3 dir="auto">Bug report</h3>
<p dir="auto"><strong>Bug summary</strong></p>
<p dir="auto">Setting the edge color of markers on a 3D scatterplot apparently doesn't work.</p>
<p dir="auto"><strong>Code for reproduction</strong></p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter([0, 1], [0, 1], [0, 1], c='b', edgecolors='none')
plt.show()"><pre class="notranslate"><span class="pl-k">import</span> <span class="pl-s1">matplotlib</span>.<span class="pl-s1">pyplot</span> <span class="pl-k">as</span> <span class="pl-s1">plt</span>
<span class="pl-k">import</span> <span class="pl-s1">numpy</span> <span class="pl-k">as</span> <span class="pl-s1">np</span>
<span class="pl-k">from</span> <span class="pl-s1">mpl_toolkits</span>.<span class="pl-s1">mplot3d</span> <span class="pl-k">import</span> <span class="pl-v">Axes3D</span>
<span class="pl-s1">fig</span> <span class="pl-c1">=</span> <span class="pl-s1">plt</span>.<span class="pl-en">figure</span>()
<span class="pl-s1">ax</span> <span class="pl-c1">=</span> <span class="pl-s1">fig</span>.<span class="pl-en">add_subplot</span>(<span class="pl-c1">111</span>, <span class="pl-s1">projection</span><span class="pl-c1">=</span><span class="pl-s">'3d'</span>)
<span class="pl-s1">ax</span>.<span class="pl-en">scatter</span>([<span class="pl-c1">0</span>, <span class="pl-c1">1</span>], [<span class="pl-c1">0</span>, <span class="pl-c1">1</span>], [<span class="pl-c1">0</span>, <span class="pl-c1">1</span>], <span class="pl-s1">c</span><span class="pl-c1">=</span><span class="pl-s">'b'</span>, <span class="pl-s1">edgecolors</span><span class="pl-c1">=</span><span class="pl-s">'none'</span>)
<span class="pl-s1">plt</span>.<span class="pl-en">show</span>()</pre></div>
<p dir="auto"><strong>Actual outcome</strong></p>

<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="ValueError                                Traceback (most recent call last)
~\.conda\envs\brian2genn\lib\site-packages\IPython\core\formatters.py in __call__(self, obj)
    339                 pass
    340             else:
--&gt; 341                 return printer(obj)
    342             # Finally look for special method names
    343             method = get_real_method(obj, self.print_method)

~\.conda\envs\brian2genn\lib\site-packages\IPython\core\pylabtools.py in (fig)
    252         jpg_formatter.for_type(Figure, lambda fig: print_figure(fig, 'jpg', **kwargs))
    253     if 'svg' in formats:
--&gt; 254         svg_formatter.for_type(Figure, lambda fig: print_figure(fig, 'svg', **kwargs))
    255     if 'pdf' in formats:
    256         pdf_formatter.for_type(Figure, lambda fig: print_figure(fig, 'pdf', **kwargs))

~\.conda\envs\brian2genn\lib\site-packages\IPython\core\pylabtools.py in print_figure(fig, fmt, bbox_inches, **kwargs)
    130         FigureCanvasBase(fig)
    131 
--&gt; 132     fig.canvas.print_figure(bytes_io, **kw)
    133     data = bytes_io.getvalue()
    134     if fmt == 'svg':

~\.conda\envs\brian2genn\lib\site-packages\matplotlib\backend_bases.py in print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, bbox_inches, **kwargs)
   2063                         orientation=orientation,
   2064                         dryrun=True,
-&gt; 2065                         **kwargs)
   2066                     renderer = self.figure._cachedRenderer
   2067                     bbox_artists = kwargs.pop(&quot;bbox_extra_artists&quot;, None)

~\.conda\envs\brian2genn\lib\site-packages\matplotlib\backends\backend_svg.py in print_svg(self, filename, *args, **kwargs)
   1200                 detach = True
   1201 
-&gt; 1202             result = self._print_svg(filename, fh, **kwargs)
   1203 
   1204             # Detach underlying stream from wrapper so that it remains open in

~\.conda\envs\brian2genn\lib\site-packages\matplotlib\backends\backend_svg.py in _print_svg(self, filename, fh, dpi, bbox_inches_restore, **kwargs)
   1225             bbox_inches_restore=bbox_inches_restore)
   1226 
-&gt; 1227         self.figure.draw(renderer)
   1228         renderer.finalize()
   1229 

~\.conda\envs\brian2genn\lib\site-packages\matplotlib\artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
     36                 renderer.start_filter()
     37 
---&gt; 38             return draw(artist, renderer, *args, **kwargs)
     39         finally:
     40             if artist.get_agg_filter() is not None:

~\.conda\envs\brian2genn\lib\site-packages\matplotlib\figure.py in draw(self, renderer)
   1707             self.patch.draw(renderer)
   1708             mimage._draw_list_compositing_images(
-&gt; 1709                 renderer, self, artists, self.suppressComposite)
   1710 
   1711             renderer.close_group('figure')

~\.conda\envs\brian2genn\lib\site-packages\matplotlib\image.py in _draw_list_compositing_images(renderer, parent, artists, suppress_composite)
    133     if not_composite or not has_images:
    134         for a in artists:
--&gt; 135             a.draw(renderer)
    136     else:
    137         # Composite any adjacent images together

~\.conda\envs\brian2genn\lib\site-packages\matplotlib\artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
     36                 renderer.start_filter()
     37 
---&gt; 38             return draw(artist, renderer, *args, **kwargs)
     39         finally:
     40             if artist.get_agg_filter() is not None:

~\.conda\envs\brian2genn\lib\site-packages\mpl_toolkits\mplot3d\axes3d.py in draw(self, renderer)
    290                 sorted(self.collections,
    291                        key=lambda col: col.do_3d_projection(renderer),
--&gt; 292                        reverse=True)):
    293             col.zorder = zorder_offset + i
    294         for i, patch in enumerate(

~\.conda\envs\brian2genn\lib\site-packages\mpl_toolkits\mplot3d\axes3d.py in (col)
    289         for i, col in enumerate(
    290                 sorted(self.collections,
--&gt; 291                        key=lambda col: col.do_3d_projection(renderer),
    292                        reverse=True)):
    293             col.zorder = zorder_offset + i

~\.conda\envs\brian2genn\lib\site-packages\mpl_toolkits\mplot3d\art3d.py in do_3d_projection(self, renderer)
    543         self.set_facecolors(fcs)
    544 
--&gt; 545         ecs = (_zalpha(self._edgecolor3d, vzs) if self._depthshade else
    546                self._edgecolor3d)
    547         ecs = mcolors.to_rgba_array(ecs, self._alpha)

~\.conda\envs\brian2genn\lib\site-packages\mpl_toolkits\mplot3d\art3d.py in _zalpha(colors, zs)
    845     norm = Normalize(min(zs), max(zs))
    846     sats = 1 - norm(zs) * 0.7
--&gt; 847     rgba = np.broadcast_to(mcolors.to_rgba_array(colors), (len(zs), 4))
    848     return np.column_stack([rgba[:, :3], rgba[:, 3] * sats])
    849 

&lt;__array_function__ internals&gt; in broadcast_to(*args, **kwargs)

~\.conda\envs\brian2genn\lib\site-packages\numpy\lib\stride_tricks.py in broadcast_to(array, shape, subok)
    180            [1, 2, 3]])
    181     &quot;&quot;&quot;
--&gt; 182     return _broadcast_to(array, shape, subok=subok, readonly=True)
    183 
    184 

~\.conda\envs\brian2genn\lib\site-packages\numpy\lib\stride_tricks.py in _broadcast_to(array, shape, subok, readonly)
    125     it = np.nditer(
    126         (array,), flags=['multi_index', 'refs_ok', 'zerosize_ok'] + extras,
--&gt; 127         op_flags=['readonly'], itershape=shape, order='C')
    128     with it:
    129         # never really has writebackifcopy semantics

ValueError: operands could not be broadcast together with remapped shapes [original-&gt;remapped]: (0,4) and requested shape (2,4)"><pre class="notranslate"><code class="notranslate">ValueError                                Traceback (most recent call last)
~\.conda\envs\brian2genn\lib\site-packages\IPython\core\formatters.py in __call__(self, obj)
    339                 pass
    340             else:
--&gt; 341                 return printer(obj)
    342             # Finally look for special method names
    343             method = get_real_method(obj, self.print_method)

~\.conda\envs\brian2genn\lib\site-packages\IPython\core\pylabtools.py in (fig)
    252         jpg_formatter.for_type(Figure, lambda fig: print_figure(fig, 'jpg', **kwargs))
    253     if 'svg' in formats:
--&gt; 254         svg_formatter.for_type(Figure, lambda fig: print_figure(fig, 'svg', **kwargs))
    255     if 'pdf' in formats:
    256         pdf_formatter.for_type(Figure, lambda fig: print_figure(fig, 'pdf', **kwargs))

~\.conda\envs\brian2genn\lib\site-packages\IPython\core\pylabtools.py in print_figure(fig, fmt, bbox_inches, **kwargs)
    130         FigureCanvasBase(fig)
    131 
--&gt; 132     fig.canvas.print_figure(bytes_io, **kw)
    133     data = bytes_io.getvalue()
    134     if fmt == 'svg':

~\.conda\envs\brian2genn\lib\site-packages\matplotlib\backend_bases.py in print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, bbox_inches, **kwargs)
   2063                         orientation=orientation,
   2064                         dryrun=True,
-&gt; 2065                         **kwargs)
   2066                     renderer = self.figure._cachedRenderer
   2067                     bbox_artists = kwargs.pop("bbox_extra_artists", None)

~\.conda\envs\brian2genn\lib\site-packages\matplotlib\backends\backend_svg.py in print_svg(self, filename, *args, **kwargs)
   1200                 detach = True
   1201 
-&gt; 1202             result = self._print_svg(filename, fh, **kwargs)
   1203 
   1204             # Detach underlying stream from wrapper so that it remains open in

~\.conda\envs\brian2genn\lib\site-packages\matplotlib\backends\backend_svg.py in _print_svg(self, filename, fh, dpi, bbox_inches_restore, **kwargs)
   1225             bbox_inches_restore=bbox_inches_restore)
   1226 
-&gt; 1227         self.figure.draw(renderer)
   1228         renderer.finalize()
   1229 

~\.conda\envs\brian2genn\lib\site-packages\matplotlib\artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
     36                 renderer.start_filter()
     37 
---&gt; 38             return draw(artist, renderer, *args, **kwargs)
     39         finally:
     40             if artist.get_agg_filter() is not None:

~\.conda\envs\brian2genn\lib\site-packages\matplotlib\figure.py in draw(self, renderer)
   1707             self.patch.draw(renderer)
   1708             mimage._draw_list_compositing_images(
-&gt; 1709                 renderer, self, artists, self.suppressComposite)
   1710 
   1711             renderer.close_group('figure')

~\.conda\envs\brian2genn\lib\site-packages\matplotlib\image.py in _draw_list_compositing_images(renderer, parent, artists, suppress_composite)
    133     if not_composite or not has_images:
    134         for a in artists:
--&gt; 135             a.draw(renderer)
    136     else:
    137         # Composite any adjacent images together

~\.conda\envs\brian2genn\lib\site-packages\matplotlib\artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
     36                 renderer.start_filter()
     37 
---&gt; 38             return draw(artist, renderer, *args, **kwargs)
     39         finally:
     40             if artist.get_agg_filter() is not None:

~\.conda\envs\brian2genn\lib\site-packages\mpl_toolkits\mplot3d\axes3d.py in draw(self, renderer)
    290                 sorted(self.collections,
    291                        key=lambda col: col.do_3d_projection(renderer),
--&gt; 292                        reverse=True)):
    293             col.zorder = zorder_offset + i
    294         for i, patch in enumerate(

~\.conda\envs\brian2genn\lib\site-packages\mpl_toolkits\mplot3d\axes3d.py in (col)
    289         for i, col in enumerate(
    290                 sorted(self.collections,
--&gt; 291                        key=lambda col: col.do_3d_projection(renderer),
    292                        reverse=True)):
    293             col.zorder = zorder_offset + i

~\.conda\envs\brian2genn\lib\site-packages\mpl_toolkits\mplot3d\art3d.py in do_3d_projection(self, renderer)
    543         self.set_facecolors(fcs)
    544 
--&gt; 545         ecs = (_zalpha(self._edgecolor3d, vzs) if self._depthshade else
    546                self._edgecolor3d)
    547         ecs = mcolors.to_rgba_array(ecs, self._alpha)

~\.conda\envs\brian2genn\lib\site-packages\mpl_toolkits\mplot3d\art3d.py in _zalpha(colors, zs)
    845     norm = Normalize(min(zs), max(zs))
    846     sats = 1 - norm(zs) * 0.7
--&gt; 847     rgba = np.broadcast_to(mcolors.to_rgba_array(colors), (len(zs), 4))
    848     return np.column_stack([rgba[:, :3], rgba[:, 3] * sats])
    849 

&lt;__array_function__ internals&gt; in broadcast_to(*args, **kwargs)

~\.conda\envs\brian2genn\lib\site-packages\numpy\lib\stride_tricks.py in broadcast_to(array, shape, subok)
    180            [1, 2, 3]])
    181     """
--&gt; 182     return _broadcast_to(array, shape, subok=subok, readonly=True)
    183 
    184 

~\.conda\envs\brian2genn\lib\site-packages\numpy\lib\stride_tricks.py in _broadcast_to(array, shape, subok, readonly)
    125     it = np.nditer(
    126         (array,), flags=['multi_index', 'refs_ok', 'zerosize_ok'] + extras,
--&gt; 127         op_flags=['readonly'], itershape=shape, order='C')
    128     with it:
    129         # never really has writebackifcopy semantics

ValueError: operands could not be broadcast together with remapped shapes [original-&gt;remapped]: (0,4) and requested shape (2,4)
</code></pre></div>
<p dir="auto"><strong>Expected outcome</strong></p>
<p dir="auto">A 3D scatter plot where the markers don't have edge colors.</p>


<p dir="auto"><strong>Matplotlib version</strong></p>

<ul dir="auto">
<li>Operating system: Windows 10</li>
<li>Matplotlib version: 3.1.3</li>
<li>Matplotlib backend (<code class="notranslate">print(matplotlib.get_backend())</code>): module://ipykernel.pylab.backend_inline</li>
<li>Python version: 3.7.7</li>
<li>Jupyter version (if applicable): core=4.6.3, notebook=6.0.3</li>
<li>Other libraries:</li>
</ul>

<p dir="auto">I installed from pip, if I remember. There's a possibility it was from conda forge</p>
<p dir="auto">Assigning "none" to facecolor or color parameter does not work any longer for 3D scatter plots. My current version of matplotlib is 3.2.2</p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

np.random.seed(2121)
x = np.random.randn(3, 10)

# %% 2D (still working)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(*x[0:2, :], marker='o', facecolor='blue', color='red', s=50)  # working
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(*x[0:2, :], marker='o', facecolor='none', color='red', s=50)   # working
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(*x[0:2, :], marker='o', facecolor='blue', color='none', s=50)   # working

# %% 3D (not working any longer)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(*x, marker='o', facecolor='blue', color='red', s=50)   # working
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(*x, marker='o', facecolor=&quot;none&quot;, color='red', s=50)   # NOT working
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(*x, marker='o', facecolor='blue', color=&quot;none&quot;, s=50)  # NOT working"><pre class="notranslate"><span class="pl-k">import</span> <span class="pl-s1">numpy</span> <span class="pl-k">as</span> <span class="pl-s1">np</span>
<span class="pl-k">import</span> <span class="pl-s1">matplotlib</span>.<span class="pl-s1">pyplot</span> <span class="pl-k">as</span> <span class="pl-s1">plt</span>
<span class="pl-k">from</span> <span class="pl-s1">mpl_toolkits</span>.<span class="pl-s1">mplot3d</span> <span class="pl-k">import</span> <span class="pl-v">Axes3D</span>

<span class="pl-s1">np</span>.<span class="pl-s1">random</span>.<span class="pl-en">seed</span>(<span class="pl-c1">2121</span>)
<span class="pl-s1">x</span> <span class="pl-c1">=</span> <span class="pl-s1">np</span>.<span class="pl-s1">random</span>.<span class="pl-en">randn</span>(<span class="pl-c1">3</span>, <span class="pl-c1">10</span>)

<span class="pl-c"># %% 2D (still working)</span>
<span class="pl-s1">fig</span> <span class="pl-c1">=</span> <span class="pl-s1">plt</span>.<span class="pl-en">figure</span>()
<span class="pl-s1">ax</span> <span class="pl-c1">=</span> <span class="pl-s1">fig</span>.<span class="pl-en">add_subplot</span>(<span class="pl-c1">111</span>)
<span class="pl-s1">ax</span>.<span class="pl-en">scatter</span>(<span class="pl-c1">*</span><span class="pl-s1">x</span>[<span class="pl-c1">0</span>:<span class="pl-c1">2</span>, :], <span class="pl-s1">marker</span><span class="pl-c1">=</span><span class="pl-s">'o'</span>, <span class="pl-s1">facecolor</span><span class="pl-c1">=</span><span class="pl-s">'blue'</span>, <span class="pl-s1">color</span><span class="pl-c1">=</span><span class="pl-s">'red'</span>, <span class="pl-s1">s</span><span class="pl-c1">=</span><span class="pl-c1">50</span>)  <span class="pl-c"># working</span>
<span class="pl-s1">fig</span> <span class="pl-c1">=</span> <span class="pl-s1">plt</span>.<span class="pl-en">figure</span>()
<span class="pl-s1">ax</span> <span class="pl-c1">=</span> <span class="pl-s1">fig</span>.<span class="pl-en">add_subplot</span>(<span class="pl-c1">111</span>)
<span class="pl-s1">ax</span>.<span class="pl-en">scatter</span>(<span class="pl-c1">*</span><span class="pl-s1">x</span>[<span class="pl-c1">0</span>:<span class="pl-c1">2</span>, :], <span class="pl-s1">marker</span><span class="pl-c1">=</span><span class="pl-s">'o'</span>, <span class="pl-s1">facecolor</span><span class="pl-c1">=</span><span class="pl-s">'none'</span>, <span class="pl-s1">color</span><span class="pl-c1">=</span><span class="pl-s">'red'</span>, <span class="pl-s1">s</span><span class="pl-c1">=</span><span class="pl-c1">50</span>)   <span class="pl-c"># working</span>
<span class="pl-s1">fig</span> <span class="pl-c1">=</span> <span class="pl-s1">plt</span>.<span class="pl-en">figure</span>()
<span class="pl-s1">ax</span> <span class="pl-c1">=</span> <span class="pl-s1">fig</span>.<span class="pl-en">add_subplot</span>(<span class="pl-c1">111</span>)
<span class="pl-s1">ax</span>.<span class="pl-en">scatter</span>(<span class="pl-c1">*</span><span class="pl-s1">x</span>[<span class="pl-c1">0</span>:<span class="pl-c1">2</span>, :], <span class="pl-s1">marker</span><span class="pl-c1">=</span><span class="pl-s">'o'</span>, <span class="pl-s1">facecolor</span><span class="pl-c1">=</span><span class="pl-s">'blue'</span>, <span class="pl-s1">color</span><span class="pl-c1">=</span><span class="pl-s">'none'</span>, <span class="pl-s1">s</span><span class="pl-c1">=</span><span class="pl-c1">50</span>)   <span class="pl-c"># working</span>

<span class="pl-c"># %% 3D (not working any longer)</span>
<span class="pl-s1">fig</span> <span class="pl-c1">=</span> <span class="pl-s1">plt</span>.<span class="pl-en">figure</span>()
<span class="pl-s1">ax</span> <span class="pl-c1">=</span> <span class="pl-s1">fig</span>.<span class="pl-en">add_subplot</span>(<span class="pl-c1">111</span>, <span class="pl-s1">projection</span><span class="pl-c1">=</span><span class="pl-s">'3d'</span>)
<span class="pl-s1">ax</span>.<span class="pl-en">scatter</span>(<span class="pl-c1">*</span><span class="pl-s1">x</span>, <span class="pl-s1">marker</span><span class="pl-c1">=</span><span class="pl-s">'o'</span>, <span class="pl-s1">facecolor</span><span class="pl-c1">=</span><span class="pl-s">'blue'</span>, <span class="pl-s1">color</span><span class="pl-c1">=</span><span class="pl-s">'red'</span>, <span class="pl-s1">s</span><span class="pl-c1">=</span><span class="pl-c1">50</span>)   <span class="pl-c"># working</span>
<span class="pl-s1">fig</span> <span class="pl-c1">=</span> <span class="pl-s1">plt</span>.<span class="pl-en">figure</span>()
<span class="pl-s1">ax</span> <span class="pl-c1">=</span> <span class="pl-s1">fig</span>.<span class="pl-en">add_subplot</span>(<span class="pl-c1">111</span>, <span class="pl-s1">projection</span><span class="pl-c1">=</span><span class="pl-s">'3d'</span>)
<span class="pl-s1">ax</span>.<span class="pl-en">scatter</span>(<span class="pl-c1">*</span><span class="pl-s1">x</span>, <span class="pl-s1">marker</span><span class="pl-c1">=</span><span class="pl-s">'o'</span>, <span class="pl-s1">facecolor</span><span class="pl-c1">=</span><span class="pl-s">"none"</span>, <span class="pl-s1">color</span><span class="pl-c1">=</span><span class="pl-s">'red'</span>, <span class="pl-s1">s</span><span class="pl-c1">=</span><span class="pl-c1">50</span>)   <span class="pl-c"># NOT working</span>
<span class="pl-s1">fig</span> <span class="pl-c1">=</span> <span class="pl-s1">plt</span>.<span class="pl-en">figure</span>()
<span class="pl-s1">ax</span> <span class="pl-c1">=</span> <span class="pl-s1">fig</span>.<span class="pl-en">add_subplot</span>(<span class="pl-c1">111</span>, <span class="pl-s1">projection</span><span class="pl-c1">=</span><span class="pl-s">'3d'</span>)
<span class="pl-s1">ax</span>.<span class="pl-en">scatter</span>(<span class="pl-c1">*</span><span class="pl-s1">x</span>, <span class="pl-s1">marker</span><span class="pl-c1">=</span><span class="pl-s">'o'</span>, <span class="pl-s1">facecolor</span><span class="pl-c1">=</span><span class="pl-s">'blue'</span>, <span class="pl-s1">color</span><span class="pl-c1">=</span><span class="pl-s">"none"</span>, <span class="pl-s1">s</span><span class="pl-c1">=</span><span class="pl-c1">50</span>)  <span class="pl-c"># NOT working</span></pre></div>
<p dir="auto">The console returns the following error:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="&lt;mpl_toolkits.mplot3d.art3d.Path3DCollection at 0x7f668ea53b90&gt;Traceback (most recent call last):
  File &quot;/home/vanwynch/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_qt5.py&quot;, line 496, in _draw_idle
    self.draw()
  File &quot;/home/vanwynch/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py&quot;, line 393, in draw
    self.figure.draw(self.renderer)
  File &quot;/home/vanwynch/anaconda3/lib/python3.7/site-packages/matplotlib/artist.py&quot;, line 38, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File &quot;/home/vanwynch/anaconda3/lib/python3.7/site-packages/matplotlib/figure.py&quot;, line 1736, in draw
    renderer, self, artists, self.suppressComposite)
  File &quot;/home/vanwynch/anaconda3/lib/python3.7/site-packages/matplotlib/image.py&quot;, line 137, in _draw_list_compositing_images
    a.draw(renderer)
  File &quot;/home/vanwynch/anaconda3/lib/python3.7/site-packages/matplotlib/artist.py&quot;, line 38, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File &quot;/home/vanwynch/anaconda3/lib/python3.7/site-packages/mpl_toolkits/mplot3d/axes3d.py&quot;, line 293, in draw
    reverse=True)):
  File &quot;/home/vanwynch/anaconda3/lib/python3.7/site-packages/mpl_toolkits/mplot3d/axes3d.py&quot;, line 292, in &lt;lambda&gt;
    key=lambda col: col.do_3d_projection(renderer),
  File &quot;/home/vanwynch/anaconda3/lib/python3.7/site-packages/mpl_toolkits/mplot3d/art3d.py&quot;, line 540, in do_3d_projection
    fcs = (_zalpha(self._facecolor3d, vzs) if self._depthshade else
  File &quot;/home/vanwynch/anaconda3/lib/python3.7/site-packages/mpl_toolkits/mplot3d/art3d.py&quot;, line 847, in _zalpha
    rgba = np.broadcast_to(mcolors.to_rgba_array(colors), (len(zs), 4))
  File &quot;&lt;__array_function__ internals&gt;&quot;, line 6, in broadcast_to
  File &quot;/home/vanwynch/anaconda3/lib/python3.7/site-packages/numpy/lib/stride_tricks.py&quot;, line 182, in broadcast_to
    return _broadcast_to(array, shape, subok=subok, readonly=True)
  File &quot;/home/vanwynch/anaconda3/lib/python3.7/site-packages/numpy/lib/stride_tricks.py&quot;, line 127, in _broadcast_to
    op_flags=['readonly'], itershape=shape, order='C')
ValueError: operands could not be broadcast together with remapped shapes [original-&gt;remapped]: (0,4) and requested shape (10,4)
Traceback (most recent call last):
  File &quot;/home/vanwynch/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_qt5.py&quot;, line 496, in _draw_idle
    self.draw()
  File &quot;/home/vanwynch/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py&quot;, line 393, in draw
    self.figure.draw(self.renderer)
  File &quot;/home/vanwynch/anaconda3/lib/python3.7/site-packages/matplotlib/artist.py&quot;, line 38, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File &quot;/home/vanwynch/anaconda3/lib/python3.7/site-packages/matplotlib/figure.py&quot;, line 1736, in draw
    renderer, self, artists, self.suppressComposite)
  File &quot;/home/vanwynch/anaconda3/lib/python3.7/site-packages/matplotlib/image.py&quot;, line 137, in _draw_list_compositing_images
    a.draw(renderer)
  File &quot;/home/vanwynch/anaconda3/lib/python3.7/site-packages/matplotlib/artist.py&quot;, line 38, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File &quot;/home/vanwynch/anaconda3/lib/python3.7/site-packages/mpl_toolkits/mplot3d/axes3d.py&quot;, line 293, in draw
    reverse=True)):
  File &quot;/home/vanwynch/anaconda3/lib/python3.7/site-packages/mpl_toolkits/mplot3d/axes3d.py&quot;, line 292, in &lt;lambda&gt;
    key=lambda col: col.do_3d_projection(renderer),
  File &quot;/home/vanwynch/anaconda3/lib/python3.7/site-packages/mpl_toolkits/mplot3d/art3d.py&quot;, line 540, in do_3d_projection
    fcs = (_zalpha(self._facecolor3d, vzs) if self._depthshade else
  File &quot;/home/vanwynch/anaconda3/lib/python3.7/site-packages/mpl_toolkits/mplot3d/art3d.py&quot;, line 847, in _zalpha
    rgba = np.broadcast_to(mcolors.to_rgba_array(colors), (len(zs), 4))
  File &quot;&lt;__array_function__ internals&gt;&quot;, line 6, in broadcast_to
  File &quot;/home/vanwynch/anaconda3/lib/python3.7/site-packages/numpy/lib/stride_tricks.py&quot;, line 182, in broadcast_to
    return _broadcast_to(array, shape, subok=subok, readonly=True)
  File &quot;/home/vanwynch/anaconda3/lib/python3.7/site-packages/numpy/lib/stride_tricks.py&quot;, line 127, in _broadcast_to
    op_flags=['readonly'], itershape=shape, order='C')
ValueError: operands could not be broadcast together with remapped shapes [original-&gt;remapped]: (0,4) and requested shape (10,4)"><pre class="notranslate"><code class="notranslate">&lt;mpl_toolkits.mplot3d.art3d.Path3DCollection at 0x7f668ea53b90&gt;Traceback (most recent call last):
  File "/home/vanwynch/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_qt5.py", line 496, in _draw_idle
    self.draw()
  File "/home/vanwynch/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py", line 393, in draw
    self.figure.draw(self.renderer)
  File "/home/vanwynch/anaconda3/lib/python3.7/site-packages/matplotlib/artist.py", line 38, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "/home/vanwynch/anaconda3/lib/python3.7/site-packages/matplotlib/figure.py", line 1736, in draw
    renderer, self, artists, self.suppressComposite)
  File "/home/vanwynch/anaconda3/lib/python3.7/site-packages/matplotlib/image.py", line 137, in _draw_list_compositing_images
    a.draw(renderer)
  File "/home/vanwynch/anaconda3/lib/python3.7/site-packages/matplotlib/artist.py", line 38, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "/home/vanwynch/anaconda3/lib/python3.7/site-packages/mpl_toolkits/mplot3d/axes3d.py", line 293, in draw
    reverse=True)):
  File "/home/vanwynch/anaconda3/lib/python3.7/site-packages/mpl_toolkits/mplot3d/axes3d.py", line 292, in &lt;lambda&gt;
    key=lambda col: col.do_3d_projection(renderer),
  File "/home/vanwynch/anaconda3/lib/python3.7/site-packages/mpl_toolkits/mplot3d/art3d.py", line 540, in do_3d_projection
    fcs = (_zalpha(self._facecolor3d, vzs) if self._depthshade else
  File "/home/vanwynch/anaconda3/lib/python3.7/site-packages/mpl_toolkits/mplot3d/art3d.py", line 847, in _zalpha
    rgba = np.broadcast_to(mcolors.to_rgba_array(colors), (len(zs), 4))
  File "&lt;__array_function__ internals&gt;", line 6, in broadcast_to
  File "/home/vanwynch/anaconda3/lib/python3.7/site-packages/numpy/lib/stride_tricks.py", line 182, in broadcast_to
    return _broadcast_to(array, shape, subok=subok, readonly=True)
  File "/home/vanwynch/anaconda3/lib/python3.7/site-packages/numpy/lib/stride_tricks.py", line 127, in _broadcast_to
    op_flags=['readonly'], itershape=shape, order='C')
ValueError: operands could not be broadcast together with remapped shapes [original-&gt;remapped]: (0,4) and requested shape (10,4)
Traceback (most recent call last):
  File "/home/vanwynch/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_qt5.py", line 496, in _draw_idle
    self.draw()
  File "/home/vanwynch/anaconda3/lib/python3.7/site-packages/matplotlib/backends/backend_agg.py", line 393, in draw
    self.figure.draw(self.renderer)
  File "/home/vanwynch/anaconda3/lib/python3.7/site-packages/matplotlib/artist.py", line 38, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "/home/vanwynch/anaconda3/lib/python3.7/site-packages/matplotlib/figure.py", line 1736, in draw
    renderer, self, artists, self.suppressComposite)
  File "/home/vanwynch/anaconda3/lib/python3.7/site-packages/matplotlib/image.py", line 137, in _draw_list_compositing_images
    a.draw(renderer)
  File "/home/vanwynch/anaconda3/lib/python3.7/site-packages/matplotlib/artist.py", line 38, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "/home/vanwynch/anaconda3/lib/python3.7/site-packages/mpl_toolkits/mplot3d/axes3d.py", line 293, in draw
    reverse=True)):
  File "/home/vanwynch/anaconda3/lib/python3.7/site-packages/mpl_toolkits/mplot3d/axes3d.py", line 292, in &lt;lambda&gt;
    key=lambda col: col.do_3d_projection(renderer),
  File "/home/vanwynch/anaconda3/lib/python3.7/site-packages/mpl_toolkits/mplot3d/art3d.py", line 540, in do_3d_projection
    fcs = (_zalpha(self._facecolor3d, vzs) if self._depthshade else
  File "/home/vanwynch/anaconda3/lib/python3.7/site-packages/mpl_toolkits/mplot3d/art3d.py", line 847, in _zalpha
    rgba = np.broadcast_to(mcolors.to_rgba_array(colors), (len(zs), 4))
  File "&lt;__array_function__ internals&gt;", line 6, in broadcast_to
  File "/home/vanwynch/anaconda3/lib/python3.7/site-packages/numpy/lib/stride_tricks.py", line 182, in broadcast_to
    return _broadcast_to(array, shape, subok=subok, readonly=True)
  File "/home/vanwynch/anaconda3/lib/python3.7/site-packages/numpy/lib/stride_tricks.py", line 127, in _broadcast_to
    op_flags=['readonly'], itershape=shape, order='C')
ValueError: operands could not be broadcast together with remapped shapes [original-&gt;remapped]: (0,4) and requested shape (10,4)
</code></pre></div>
<p dir="auto">The workaround is to use (0, 0, 0, 0) as color/facecolor rather than "none" :</p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# %% 3D workaround
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(*x, marker='o', facecolor='blue', color='red', s=50)   # working
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(*x, marker='o', facecolor=(0, 0, 0, 0), color='red', s=50)   # working
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(*x, marker='o', facecolor='blue', color=(0, 0, 0, 0), s=50)   # working"><pre class="notranslate"><span class="pl-c"># %% 3D workaround</span>
<span class="pl-s1">fig</span> <span class="pl-c1">=</span> <span class="pl-s1">plt</span>.<span class="pl-en">figure</span>()
<span class="pl-s1">ax</span> <span class="pl-c1">=</span> <span class="pl-s1">fig</span>.<span class="pl-en">add_subplot</span>(<span class="pl-c1">111</span>, <span class="pl-s1">projection</span><span class="pl-c1">=</span><span class="pl-s">'3d'</span>)
<span class="pl-s1">ax</span>.<span class="pl-en">scatter</span>(<span class="pl-c1">*</span><span class="pl-s1">x</span>, <span class="pl-s1">marker</span><span class="pl-c1">=</span><span class="pl-s">'o'</span>, <span class="pl-s1">facecolor</span><span class="pl-c1">=</span><span class="pl-s">'blue'</span>, <span class="pl-s1">color</span><span class="pl-c1">=</span><span class="pl-s">'red'</span>, <span class="pl-s1">s</span><span class="pl-c1">=</span><span class="pl-c1">50</span>)   <span class="pl-c"># working</span>
<span class="pl-s1">fig</span> <span class="pl-c1">=</span> <span class="pl-s1">plt</span>.<span class="pl-en">figure</span>()
<span class="pl-s1">ax</span> <span class="pl-c1">=</span> <span class="pl-s1">fig</span>.<span class="pl-en">add_subplot</span>(<span class="pl-c1">111</span>, <span class="pl-s1">projection</span><span class="pl-c1">=</span><span class="pl-s">'3d'</span>)
<span class="pl-s1">ax</span>.<span class="pl-en">scatter</span>(<span class="pl-c1">*</span><span class="pl-s1">x</span>, <span class="pl-s1">marker</span><span class="pl-c1">=</span><span class="pl-s">'o'</span>, <span class="pl-s1">facecolor</span><span class="pl-c1">=</span>(<span class="pl-c1">0</span>, <span class="pl-c1">0</span>, <span class="pl-c1">0</span>, <span class="pl-c1">0</span>), <span class="pl-s1">color</span><span class="pl-c1">=</span><span class="pl-s">'red'</span>, <span class="pl-s1">s</span><span class="pl-c1">=</span><span class="pl-c1">50</span>)   <span class="pl-c"># working</span>
<span class="pl-s1">fig</span> <span class="pl-c1">=</span> <span class="pl-s1">plt</span>.<span class="pl-en">figure</span>()
<span class="pl-s1">ax</span> <span class="pl-c1">=</span> <span class="pl-s1">fig</span>.<span class="pl-en">add_subplot</span>(<span class="pl-c1">111</span>, <span class="pl-s1">projection</span><span class="pl-c1">=</span><span class="pl-s">'3d'</span>)
<span class="pl-s1">ax</span>.<span class="pl-en">scatter</span>(<span class="pl-c1">*</span><span class="pl-s1">x</span>, <span class="pl-s1">marker</span><span class="pl-c1">=</span><span class="pl-s">'o'</span>, <span class="pl-s1">facecolor</span><span class="pl-c1">=</span><span class="pl-s">'blue'</span>, <span class="pl-s1">color</span><span class="pl-c1">=</span>(<span class="pl-c1">0</span>, <span class="pl-c1">0</span>, <span class="pl-c1">0</span>, <span class="pl-c1">0</span>), <span class="pl-s1">s</span><span class="pl-c1">=</span><span class="pl-c1">50</span>)   <span class="pl-c"># working</span></pre></div>