 <p>Yes, you can do this, but it needs to be done through a separate mechanism than the <code>c</code> argument. In a nutshell, use <code>facecolors=rgb_array</code>.</p> <hr> <p>First off, let me explain what's going on. The <code>Collection</code> that <code>scatter</code> returns has two "systems" (for lack of a better term) for setting colors.</p> <p>If you use the <code>c</code> argument, you're setting the colors through the <code>ScalarMappable</code> "system". This specifies that the colors should be controlled by applying a colormap to a single variable. (This is the <code>set_array</code> method of anything that inherits from <code>ScalarMappable</code>.)</p> <p>In addition to the <code>ScalarMappable</code> system, the colors of a collection can be set independently. In that case, you'd use the <code>facecolors</code> kwarg.</p> <hr> <p>As a quick example, these points will have randomly specified rgb colors:</p> <pre><code>import matplotlib.pyplot as plt import numpy as np x, y = np.random.random((2, 10)) rgb = np.random.random((10, 3)) fig, ax = plt.subplots() ax.scatter(x, y, s=200, facecolors=rgb) plt.show() </code></pre> <p><img src="https://i.stack.imgur.com/PTY2v.png" alt="enter image description here"></p>