我想在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
但现在图像显示BLACK为2,RED为1。
如何保持颜色与价值的关系?
你的主要错误是你的色彩图中的红色和黑色颜色颠倒了。您可能这样做是因为按照正确的顺序放置颜色会使第一个矩阵中的像素变为红色 - 这是不需要的。原因是像素值映射到色彩图颜色的方式,可以通过显示colorbar
看到。您的自定义色彩映射恰好起作用,因为red
用于值大约为0.5
的像素 - 其中没有。
你需要做的是正确设置color limits for your axes:
colormap([Background; Black; Red])
set(gca, 'CLim', [0 2]);
然后,这就是初始矩阵会发生的情况(请注意,图像中没有红色像素,但色彩图仍为它们做好准备):