我有一个二维numpy数组,我想绘制显示不同颜色的区域(蓝色代表数据<;0,绿色代表0<;=数据<;5,红色代表数据>;5)。
实质上,我试图根据数据范围对连续数据使用分类颜色。
目前我使用的是 numexpr
对数据进行表达 (1 * (data < 0)) + (2 * (data >= 0) & (data < 5)) + (3 * (data >= 5))
. 然后使用索引颜色数组词典({1: (0, 0, 255), 2: (0, 255, 0), 3: (255, 0, 0)}
)来计算数据的颜色值。我认为这是矫枉过正。一定有一个简单的方法可以使用seabornmatplot使用自定义colormaps来完成这个任务,我找不到。任何指针示例代码都会有很大帮助。
你可以创建一个自定义颜色图,并使用 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)
产出: