pip*_*pip 3 color-palette python-2.7 seaborn
我正在使用python seaborn包生成不同的调色板(seaborn.diverging_palette)。
我可以选择两种极端的颜色,并定义中心是浅色->白色还是深色->黑色(center
参数)。但是我想将中间部分的颜色(在我的情况下为白色)扩展到给定的值范围。
例如,我的值是从0到20。因此,我的中点是10。因此,只有10是白色,然后在变为0/20时它会变得越来越绿/越来越蓝。我想将白色保持在7到13之间(中点之前/之后为3),然后开始移动为绿色/蓝色。
我找到了sep
参数,该参数扩展或减少了该中心白色部分。但是我找不到关于它的值含义的任何解释,例如为了找到哪个值sep
对应于中点的每一侧3。
有人知道sep和价值量表之间的关系吗?或者,如果另一个参数可以实现预期的行为?
看来sep
参数可以取1
和之间的任何整数254
。中点颜色将覆盖的颜色图的比例等于sep/256
。
可视化此方法的简单方法是使用和seaborn.palplot
,n=256
将调色板拆分为256色。
这是带有的调色板sep = 1
:
sns.palplot(sns.diverging_palette(0, 255, sep=1, n=256))
Run Code Online (Sandbox Code Playgroud)
这是一个调色板 sep = 8
sns.palplot(sns.diverging_palette(0, 255, sep=8, n=256))
Run Code Online (Sandbox Code Playgroud)
这是sep = 64
(即调色板的四分之一是中点颜色)
sns.palplot(sns.diverging_palette(0, 255, sep=64, n=256))
Run Code Online (Sandbox Code Playgroud)
这是sep = 128
(即一半是中点颜色)
sns.palplot(sns.diverging_palette(0, 255, sep=128, n=256))
Run Code Online (Sandbox Code Playgroud)
这就是sep = 254
(即,调色板边缘以外的所有颜色都是中点颜色)
sns.palplot(sns.diverging_palette(0, 255, sep=254, n=256))
Run Code Online (Sandbox Code Playgroud)
因此,对于您的范围为0 - 20
,但中点范围为的情况7 - 13
,您希望调色板的分数为中点6/20
。要将其转换为sep
,我们需要乘以256,从而得到sep = 256 * 6 / 20 = 76.8
。但是,sep
必须为整数,因此请使用77
。
这是一个制作发散调色板的脚本,并绘制一个sep = 77
色条以显示使用会在7到13之间留下正确的中点颜色:
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
# Create your palette
cmap = sns.diverging_palette(0,255,sep=77, as_cmap=True)
# Some data with a range of 0 to 20
x = np.linspace(0,20,20).reshape(4,5)
# Plot a heatmap (I turned off the cbar here, so I can create it later with ticks spaced every integer)
ax = sns.heatmap(x, cmap=cmap, vmin=0, vmax=20, cbar = False)
# Grab the heatmap from the axes
hmap = ax.collections[0]
# make a colorbar with ticks spaced every integer
cmap = plt.gcf().colorbar(hmap)
cmap.set_ticks(range(21))
plt.show()
Run Code Online (Sandbox Code Playgroud)