seaborn/matplotlib 自定义颜色图

seaborn/matplotlib custom colormap

我有一个 2d numpy 数组,我想绘制它以显示不同的区域颜色(蓝色表示数据 < 0,绿色表示 0 <= 数据 < 5,红色表示数据 > 5)。

本质上,我正在尝试根据数据范围对连续数据使用分类颜色。

目前我正在使用表达式 (1 * (data < 0)) + (2 * (data >= 0) & (data < 5)) + (3 * (data >= 5)) 对数据使用 numexpr。然后使用索引颜色 array/dict ({1: (0, 0, 255), 2: (0, 255, 0), 3: (255, 0, 0)}) 计算数据的颜色值。我认为这是矫枉过正。必须有一种简单的方法可以使用 seaborn/matplot 使用自定义颜色图来执行此操作,但我找不到。任何 pointers/sample 代码都会很有帮助。

您可以创建自定义颜色图并使用 sns.heatmapvmin=-1, vmax=6:

# random data
np.random.seed(1)
a = np.random.uniform(-2,10,(10,10))

from matplotlib import cm, colors as mcolors

# create a custome color map
cmap = mcolors.ListedColormap(['b']+['g']*5 + ['r'], name='abcd', N=7)

# plot heat map, annotation for reference
sns.heatmap(a, annot=True,xticklabels=False, yticklabels=False, cmap=cmap, vmin=-1,vmax=6)

输出: