在seaborn中设置自定义调色板的alpha值

4

我正在修改在seaborn文档中找到的一段代码,以便设计一个适用于matplotlib和seaborn的调色板。下面的代码运行良好,但是,如果绘制许多点(例如5000个),较深的颜色将支配图表。解决这个问题的快速方法是将其中一个(或两个)颜色的alpha值设置为较低的值。

custom = ["#D1EC9C", "#F1EBF4"]
sns.set_palette(custom)
# construct cmap
my_cmap = ListedColormap(custom)

N = 5000
data1 = np.random.randn(N)
data2 = np.random.randn(N)
colors = np.linspace(0,1,N)
plt.scatter(data1, data2, c=colors, cmap=my_cmap)
plt.colorbar()
plt.show()

有人知道如何设置自定义Seaborn调色板的alpha值吗? 在此输入图片描述 谢谢


1
为什么您要在调色板中设置alpha而不是通过向散点图调用传递“alpha=0.5”来设置它? - BrenBarn
散点图中的alpha参数会同时改变所有元素的透明度。我需要降低其中一个变量的透明度,而不是全部。 - Luis Miguel
为什么?如果其中一种颜色是不透明的,即使另一种颜色被隐藏在其后面,您仍然看不到它。 - BrenBarn
1
为什么不呢?使用不同的 alpha 值混合两种重叠的颜色(如黄色和红色)将会产生第三种颜色(橙色),更好地区分数据点。然而,每个 alpha 值都需要微调以产生正确的色调。 - Luis Miguel
1个回答

2

您可以在颜色映射中设置alpha值:

custom = [(0xD1/0xFF, 0xEC/0xFF, 0x9C/0xFF, 1), (0xF1/0xFF, 0xEB/0xFF, 0xF4/0xFF, 0.5)]
my_cmap = mpl.colors.ListedColormap(custom)

在这里,我将第二个颜色的alpha值设置为0.5;如果您愿意,可以对另一个颜色进行相同的操作。

请注意,seaborn在此并没有真正参与。图表的颜色取决于您在colormap中传递的颜色;seaborn的调色板没有影响。 seaborn对您的图表唯一的影响是背景、轴、网格等的格式化。

正如我在评论中所说,使用alpha仅针对一个颜色不会使您的图表看起来好看。如果一个颜色仍然不透明,它仍然会覆盖另一个颜色的点,只不过更明显(因为现在另一个颜色会变得更加淡)。此外,如果您要使用alpha(甚至可能不使用),您选择的灰色可能不是一个好主意,因为它类似于seaborn提供的灰色背景,使得很难区分灰色点和灰色背景。


这并没有回答原始问题。请求一个 seaborn 调色板,但你只提供了一个 matplotlib 颜色映射。 - Dave Kielpinski
@DaveKielpinski:正如我在答案中所指出的,seaborn调色板在问题描述的情况下并未使用,因此创建一个seaborn调色板对绘图的外观没有任何影响。 - BrenBarn
那么,问题要么提出得不好,要么标题有误导性。 - Dave Kielpinski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接