matplotlib中的小散点图标记总是黑色的

我正在尝试使用matplotlib来制作一个非常小的灰点散点图。 由于点密度,点数需要很小。 问题是scatter()函数的标记似乎既有行又有填充。 当标记很小时,只有线是可见的,而不是填充,线不是正确的颜色(它总是黑色的)。

我可以得到正是我想要的使用gnuplot:绘制节点'点pt 0 lc rgb'灰色'

我怎样才能使用matplotlib scatterplot()使非常小的灰色点?

scatter([1,2,3], [2,4,5], s=1, facecolor='0.5', lw = 0) 

这将标记大小设置为1(s = 1),将facecolor设置为灰色(facecolor ='0.5'),将linewidth设置为0(lw = 0)。

如果标记没有脸(不能被填充,例如'+''x' ),那么edgecolor必须被设置而不是c ,并且lw不应该是0

 scatter([1,2,3], [2,4,5], marker='+', edgecolor='r') 

以下将无法正常工作

 scatter([1,2,3], [2,4,5], s=1, marker='+', facecolor='0.5', lw = 0) 

因为边缘/线条不会显示,所以不会显示任何内容。

对你的问题绝对最简单的答案是:使用color参数,而不是c参数设置整个标记的颜色。

比较结果时很容易看出差异:

 from matplotlib import pyplot as plt plt.scatter([1,2,3], [3,1,2], c='0.8') # marker not all gray plt.scatter([1,2,3], [3,1,2], color='0.8') # marker all gray 

详细信息:对于简单的使用情况,您只需要使整个标记具有相同的灰色阴影,则不必担心诸如脸部颜色和边缘颜色之类的问题,以及是否将标记定义为所有边缘或者一些边缘和一些填充。 相反,只需使用color参数,并知道您的整个标记将被设置为您指定的单一颜色!

为了回应zwol在评论中提出的问题 – 我的声望不足以留下评论,所以必须这样做:如果您的颜色来自颜色映射(即,来自“要映射的值序列”),您可以使用color = ,如下所示:

 from matplotlib import pyplot x = [1,5,8,9,5] y = [4,2,4,7,9] numSides = [2,3,1,1,5] cmap = pyplot.cm.get_cmap("copper_r") min, max = min(numSides), max(numSides) for i in range(len(x)): if numSides[i] >= 2: cax = pyplot.scatter(x[i], y[i], marker = '+', s = 100, c = numSides[i], cmap = cmap) cax.set_clim(min, max) elif numSides[i] == 1: pyplot.scatter(x[i], y[i], marker = '.', s = 40, color = cmap(numSides[i])) fig = pyplot.gcf() fig.set_size_inches(8.4, 6) fig.savefig('figure_test.png', dpi = 200) pyplot.show()