基于colormap的Matlab中的光栅图

时间:2017-11-13 19:14:02

标签: matlab raster colormap

我想基于我的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** 

2 个答案:

答案 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);