如何为 imagesc 中的颜色分配特定值

How to assign specific values to colours in imagesc

在 MATLAB 中使用 imagesc 绘图时,我试图将矩阵的三个可能值分配给三种颜色。

我只想 imagesc() 将 0 表示为白色,将 1 表示为黑色,将 2 表示为红色。

最初 imagesc() 这样做,但随着 for 循环的进行,1 和 2 的颜色被交换。

我已经尝试重新排序分配给 colormap() 的颜色,但颜色仍然交换。

这是我的代码:

Grid = 10;
M = zeros(Grid);
M(3,1:3)=1;M(2,3)=1;M(1,2)=1;
Black = [0 0 0];
White = [1 1 1];
Red = [1 0 0];
Background = White;
colormap([Background; Red; Black])
figure()
imagesc(M)

...到目前为止,还不错。我在角落里有五个黑色方块。

然而,随着我的循环进行并引入 2,矩阵如下所示:

0   0   0   0   0   0   0
0   2   1   0   0   0   0
1   0   1   0   0   0   0
0   1   1   0   0   0   0
0   0   0   0   0   0   0
0   0   0   0   0   0   0
0   0   0   0   0   0   0
0   0   0   0   0   0   0
0   0   0   0   0   0   0
0   0   0   0   0   0   0

但现在图像显示 2 为黑色,1 为红色。

如何维护颜色与值的关系?

您的主要错误是颜色图中的红色和黑色颠倒了。您这样做可能是因为按照正确的顺序排列颜色会使您的第一个矩阵中的像素变成红色——这是不需要的。原因是像素值映射到颜色图颜色的方式,可以通过显示 colorbar 看出。您的自定义颜色图 恰好起作用 因为 red 用于值约为 0.5 的像素 - 其中有 none.

您需要做的是正确设置 color limits for your axes:

colormap([Background; Black; Red])
set(gca, 'CLim', [0 2]);

然后,这就是初始矩阵会发生的情况(请注意,图像中没有红色像素,但是颜色图已经为它们准备好了 none):