matplotlib散射边而不指定edgecolor

Hos*_*hoi 6 python scatter matplotlib

现在看来,默认的散点图标记是没有边的实心圆.我想要一个带边缘的标记,并且facecolor ="none".但是如果facecolor ="none"但未指定edgecolor,则绘图为空.我希望标记有多种不同的颜色,但不关心哪一种颜色.

我怎样才能"打开"边缘?

Imp*_*est 9

有两种方法可以生成空的或空心的散射标记:

将facecolor设置为"none"

您可以"关闭"面部,而不是"只是打开"边缘.因此,为了使散射标记的面部颜色透明,您可以将结果的面颜色设置PolyCollecton"none".

sc = ax.scatter(...)
sc.set_facecolor("none")
Run Code Online (Sandbox Code Playgroud)

这不同于sc = ax.scatter(x,y, c=x, facecolor="none"),因为c参数会覆盖facecolor.

完整的例子:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0,2*np.pi,20)
y = np.sin(x)

fig, ax=plt.subplots()
sc = ax.scatter(x,y, c=x, cmap="nipy_spectral")
sc.set_facecolor("none")

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

使用非填充标记

另一种选择是使用非填充标记.这将仅在边缘处具有其面部颜色.一个例子可能 marker="$\u25EF$"来自STIX字体(也见这个问题)

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0,2*np.pi,20)
y = np.sin(x)

fig, ax=plt.subplots()

sc = ax.scatter(x,y, c=x, marker="$\u25EF$", cmap="nipy_spectral")

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述