Issue 1:
Bug report

Bug summary

Setting the edge color of markers on a 3D scatterplot apparently doesn't work.

Code for reproduction

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()

Actual outcome

ValueError Traceback (most recent call last)
~\.conda\envs\brian2genn\lib\site-packages\IPython\core\formatters.py in __call__(self, obj)
339 pass
340 else:
--> 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:
--> 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
--> 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,
-> 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
-> 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
-> 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
---> 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(
-> 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:
--> 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
---> 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),
--> 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,
--> 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
--> 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
--> 847 rgba = np.broadcast_to(mcolors.to_rgba_array(colors), (len(zs), 4))
848 return np.column_stack([rgba[:, :3], rgba[:, 3] * sats])
849

<__array_function__ internals> 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 """
--> 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,
--> 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->remapped]: (0,4) and requested shape (2,4)

Expected outcome

A 3D scatter plot where the markers don't have edge colors.

Matplotlib version

Operating system: Windows 10

Matplotlib version: 3.1.3

Matplotlib backend (print(matplotlib.get_backend())): module://ipykernel.pylab.backend_inline

Python version: 3.7.7

Jupyter version (if applicable): core=4.6.3, notebook=6.0.3

Other libraries:

I installed from pip, if I remember. There's a possibility it was from conda forge

Issue 2:
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

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="none", color='red', s=50) # NOT working
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(*x, marker='o', facecolor='blue', color="none", s=50) # NOT working

The console returns the following error:

<mpl_toolkits.mplot3d.art3d.Path3DCollection at 0x7f668ea53b90>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 <lambda>
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 "<__array_function__ internals>", 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->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 <lambda>
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 "<__array_function__ internals>", 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->remapped]: (0,4) and requested shape (10,4)

The workaround is to use (0, 0, 0, 0) as color/facecolor rather than "none" :

# %% 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