我想基于我的colormap jet 在Matlab中创建栅格图。我的色彩映射 jet 从-3(蓝色)变为+3(红色)。因此,我想将我的数据的确切值(例如,+ 1.20)绘制为色图 jet 上的相应颜色(例如,黄色)。
然而,目前我的结构 A 为66x900 double,值为0和1,结构 B 为66x900 double,每个单元格中的值不同(例如,0.21,+ 2.45,-1.09等)。
我需要做的是(1)用结构 B 的确切值替换结构 A 中等于1的值。 (2)我需要绘制由零和由结构 B 组成的值的新结构(例如, C )。
棘手的部分是在光栅图中,我只需要用colourmap jet 的颜色绘制结构 C 的值/单元格来自结构 B (包括当这些值等于零时)。那些等于零的单元格(那些未被结构 B 的值替换的单元格,因为它们已经在结构 A 中已经为零)需要变成白色像素。
示例:
Structure A
0 **1** 0 0 0 **1** 0 **1** **1** 0 0
0 **1** 0 0 0 0 0 **1** **1** 0 0
0 0 0 0 0 0 0 **1** **1** **1** **1**
0 0 0 0 0 0 0 **1** **1** **1** **1**
Structure B
1.2 **1.34** 2.34 1.33 1.43 **-2.99** 2.44 **1.27** **-2.76** 0.09 0.00
-2.3 **0.45** 2.99 2.01 -2.19 -0.98 0.56 **-1.87** **2.14** 0.00 -0.98
-0.3 1.20 -0.17 1.2 -2.33 -0.67 1.23 **1.45** **1.08** **1.01** **0.00**
1.11 -0.78 -1.66 -0.88 0.12 -1.04 -0.55 **1.32** **1.34** **1.00** **1.97**
Structure C
0 **1.34** 0 0 0 **-2.99** 0 **1.27** **-2.76** 0 0
0 **0.45** 0 0 0 0 0 **-1.87** **2.14** 0 0
0 0 0 0 0 0 0 **1.45** **1.08** **1.01** **0.00**
0 0 0 0 0 0 0 **1.32** **1.34** **1.00** **1.97**
答案 0 :(得分:2)
(1)您希望将矩阵A的每个元素与矩阵B中的对应元素相乘。这是通过在乘法符号之前添加一个点来完成的(它也适用于除法和指数)。
(2) NaN 值在Matlab图中保留为空白。
这是一个有效的例子:
% Your data
A = [1 1 1 1 1 1; 0 0 1 1 1 1; 1 1 1 0 1 1; 1 1 1 1 1 1; 1 1 1 1 1 1; 1 1 1 1 1 1];
B = [1 2 3 4 5 2; 5 4 0 0 0 4; 1 2 3 4 1 2; 5 5 5 3 3 3; 5 2 2 2 3 3; 5 1 5 3 4 4];
% Set all elements equal to zero to NaN so Matlab doesn't draw them
A(A==0) = NaN;
% This returns C(i,j) = A(i,j)*B(i,j) for all elements.
% A*B would do a matrix multiplication
C = A.*B;
%Plot
pcolor(C)
答案 1 :(得分:0)
随机值:
a = double(randi([0 1],[4 11]));
b = rand(4,11);
然后:
idx = find(a == 1);
a(idx) = b(idx);
在这里你有你的色彩图。
要获得白色像素(NaN将使它们透明,以便它们采用背景颜色):
a(a == 0) = 1;
然后,绘制它:
colormap(gray);
pcolor(a);