使用“中端”而不是“中点”创建多样化的调色板

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和价值量表之间的关系吗?或者,如果另一个参数可以实现预期的行为?

tmd*_*son 5

看来sep参数可以取1和之间的任何整数254。中点颜色将覆盖的颜色图的比例等于sep/256

可视化此方法的简单方法是使用和seaborn.palplotn=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)

在此处输入图片说明