2016-08-21 48 views
0

我正在修改我在seaborn文档中找到的一段代码,以设计matplotlib和seaborn常用的调色板。下面的代码工作得很好,但是,如果你绘制了许多点(在我的例子中为5000),则较暗的颜色在图表中占主导地位。 快速解决此问题是将一个(或两个)颜色的Alpha值设置为低。在seaborn中设置自定义调色板的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值吗? enter image description here 感谢

+1

为什么要在调色板中设置alpha而不是将它设置在散点图本身上(通过将'alpha = 0.5'传递给scatter调用)? – BrenBarn

+0

分散调用中的alpha更改了两者的alpha。我需要为我的一个变量降低α。 –

+0

为什么?如果其中一种颜色是不透明的,如果它隐藏在后面,您仍然不会看到任何其他颜色。 – BrenBarn

回答

3

您可以设置alpha为你的颜色表颜色的一部分:

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

下面笔者就给0.5秒彩色字母;如果你愿意,你可以用其他颜色来做。

请注意,seaborn并没有真正参与到这里。情节的颜色由您在颜色映射中传递的颜色决定; seaborn的调色板没有影响。在你的情节中,seaborn的唯一作用是格式化背景,坐标轴,网格等。

正如我在评论中所说的,我相信只使用一种颜色的alpha将不会让你的情节看起来像好。如果一种颜色仍然不透明,它仍然会掩盖另一种颜色的点,只会更多(因为现在其他颜色会变得更暗淡)。另外,如果你打算使用alpha(也许即使你不是),你选择的浅灰色可能不是一个好主意,因为它与seaborn提供的灰色背景相似,因此很难区分灰色从灰色背景的点。