使用" midrange"创建分歧的调色板而不是"中点"

时间:2016-03-08 13:48:24

标签: python-2.7 seaborn color-palette

我正在使用python seaborn包生成一个不同的调色板(seaborn.diverging_palette)。

我可以选择我的两种肢体颜色,并定义中心是否为浅色 - >白色或深色 - >黑色(center参数)。但我想要的是将这个中心部分颜色(在我的情况下为白色)扩展到给定的值范围。

例如,我的值从0到20.因此,我的中点是10.因此,只有10是白色,然后在转到0/20时变得更绿/更蓝。我希望将颜色从7到13保持白色(在midpont之前/之后3),然后开始移动到绿色/蓝色。

我找到了sep参数,它扩展或缩小了这个中心白色部分。但我无法找到有关其值的含义的任何解释,以便找出sep的哪个值对应于中点的每一侧3。

有人知道sep和价值量表之间的关系吗? 或者,如果另一个参数可以执行预期的行为?

1 个答案:

答案 0 :(得分:4)

sep参数似乎可以取1254之间的任意整数。中点颜色将覆盖的colourmap的分数将等于sep/256

可视化这种方法的一种简单方法是使用seaborn.palplotn=256将调色板分割成256色。

以下是sep = 1的调色板:

sns.palplot(sns.diverging_palette(0, 255, sep=1, n=256))

enter image description here

这是一个sep = 8

的调色板
sns.palplot(sns.diverging_palette(0, 255, sep=8, n=256))

enter image description here

这是sep = 64(即调色板的四分之一是中点颜色)

sns.palplot(sns.diverging_palette(0, 255, sep=64, n=256))

enter image description here

这是sep = 128(即一半是中点颜色)

sns.palplot(sns.diverging_palette(0, 255, sep=128, n=256))

enter image description here

这里是sep = 254(即调色板最边缘的颜色除了中点颜色外)

sns.palplot(sns.diverging_palette(0, 255, sep=254, n=256))

enter image description here

您的特定调色板

因此,对于您的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()

enter image description here