Matplotlib:具有colormaps的散点图,用于edgecolor但没有facecolor

Moh*_*avi 6 matplotlib scatter-plot

我想要一个带有colormap的散点图,用于edgecolors但没有facecolors。当我使用时facecolor='None',它不起作用。

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()
Run Code Online (Sandbox Code Playgroud)

有什么办法吗?

Imp*_*est 5

c参数将影响facecolor和edgecolor simultaneouly,参数facecoloredgecolor因而是忽略不计。

一种解决方案是不将c参数与颜色图一起使用,而应单独使用facecolorsedgecolors。在这种情况下,facecolors可以设置为,"None"edgecolors可以提供要使用的颜色列表。

要创建此列表,可以应用相同的颜色图。

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

一个完整的例子:

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()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • 这个解决方案比我的更优雅 (2认同)

Diz*_*ahi 5

问题是color=覆盖了facecolors=参数。

我想出的解决方案是获取PathCollection返回的pyplot.scatter(),然后facecolor直接更改。请注意,您可能需要增加线宽才能更好地查看边缘。

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()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明