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.heatmap
和 vmin=-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)
输出:
我有一个 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.heatmap
和 vmin=-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)
输出: