Matplotlib: scatter plot with color maps for edgecolor but no facecolor

I want to have a scatterplot with colormap for edgecolors, but no facecolors. When I use it facecolor='None'

, it doesn't work.

import numpy as np
import matplotlib.pyplot as plt


N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = np.pi * (15 * np.random.rand(N))**2  # 0 to 15 point radii

plt.scatter(x, y, s=area,c=colors,facecolors='None',cmap="gist_rainbow", alpha=0.5)
plt.show()

      

Any solution?

+3


source to share


2 answers


The argument c

will affect both facecolor and edgecolor, so arguments facecolor

and are edgecolor

ignored.

The solution would not be to use the argument c

along with colormap, but instead only use facecolors

and edgecolors

. In this case, it facecolors

can be set to "None"

, or a edgecolors

list of colors for use can be provided.

To create this list, the same color palette can be applied.

c = plt.cm.gist_rainbow(colors)
plt.scatter(x, y, s=area,facecolors="None", edgecolors=c, lw=1,alpha=0.5)

      



Complete example:

import numpy as np
import matplotlib.pyplot as plt

N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = np.pi * (15 * np.random.rand(N))**2  # 0 to 15 point radii

c = plt.cm.gist_rainbow(colors)
plt.scatter(x, y, s=area,facecolors="None", edgecolors=c, lw=2,alpha=0.5)
plt.show()

      

enter image description here

+3


source


The problem is what color=

overrides the argument facecolors=

.

The solution I came across is to revert PathCollection

returned pyplot.scatter()

and then directly modify facecolor

. Note that you probably need to increase the line width to see the edges better.



import numpy as np
import matplotlib.pyplot as plt


N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = np.pi * (15 * np.random.rand(N))**2  # 0 to 15 point radii

a = plt.scatter(x, y, s=area,c=colors,facecolor='none',lw=2,cmap="gist_rainbow", alpha=0.5)
a.set_facecolor('none')
plt.show()

      

enter image description here

+2


source







All Articles