我正在使用python seaborn包生成一个不同的调色板(seaborn.diverging_palette)。
我可以选择我的两种肢体颜色,并定义中心是否为浅色 - >白色或深色 - >黑色(center
参数)。但我想要的是将这个中心部分颜色(在我的情况下为白色)扩展到给定的值范围。
例如,我的值从0到20.因此,我的中点是10.因此,只有10是白色,然后在转到0/20时变得更绿/更蓝。我希望将颜色从7到13保持白色(在midpont之前/之后3),然后开始移动到绿色/蓝色。
我找到了sep
参数,它扩展或缩小了这个中心白色部分。但我无法找到有关其值的含义的任何解释,以便找出sep
的哪个值对应于中点的每一侧3。
有人知道sep和价值量表之间的关系吗? 或者,如果另一个参数可以执行预期的行为?
答案 0 :(得分:4)
sep
参数似乎可以取1
和254
之间的任意整数。中点颜色将覆盖的colourmap的分数将等于sep/256
。
可视化这种方法的一种简单方法是使用seaborn.palplot
和n=256
将调色板分割成256色。
以下是sep = 1
的调色板:
sns.palplot(sns.diverging_palette(0, 255, sep=1, n=256))
这是一个sep = 8
sns.palplot(sns.diverging_palette(0, 255, sep=8, n=256))
这是sep = 64
(即调色板的四分之一是中点颜色)
sns.palplot(sns.diverging_palette(0, 255, sep=64, n=256))
这是sep = 128
(即一半是中点颜色)
sns.palplot(sns.diverging_palette(0, 255, sep=128, n=256))
这里是sep = 254
(即调色板最边缘的颜色除了中点颜色外)
sns.palplot(sns.diverging_palette(0, 255, sep=254, n=256))
因此,对于您的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()