最大和最小数据的不同颜色

时间:2015-08-16 16:51:02

标签: matlab plot contour contourf

我的数据在0和1之间标准化,中间有连续值。是否可以制作颜色图以突出显示一个特定值?在这种情况下,我希望一个的最大值是自定义颜色,其余的使用普通的颜色映射。我已尝试通过附加所需的颜色来编辑颜色贴图,但绘图也将此颜色用于接近1的值。任何建议赞赏。

function cplotdemo

clc; close all; clear all;

DATA = peaks;
DATA = (DATA - min(DATA(:))) / ( max(DATA(:)) - min(DATA(:)) );

figure,
contourf(DATA)
colormap(jet2)
colorbar


function J = jet2(m)

if nargin < 1
    m = size(get(gcf,'colormap'),1);
end
n = ceil(m/4);
u = [(1:1:n)/n ones(1,n-1) (n:-1:1)/n]';
g = ceil(n/2) - (mod(m,4)==1) + (1:length(u))';
r = g + n;
b = g - n;
g(g>m) = [];
r(r>m) = [];
b(b<1) = [];
J = zeros(m+1,3);
J(r,1) = u(1:length(r));
J(g,2) = u(1:length(g));
J(b,3) = u(end-length(b)+1:end);

J(end,:)=[(256/2)/255,(0)/255,(256/2)/255];

我现在认为这种情况正在发生,因为contourf的工作方式。对于发布的示例,应该只有等于1的值,这是我想要使用自定义颜色的那个。

1 个答案:

答案 0 :(得分:0)

Here是创建突出显示单个级别值的自定义色彩映射的示例。在这种情况下,峰值颜色为黑色。您可以调整level以突出显示曲面中的任何值,而不仅仅是峰值。

% ==================================================
% DEFINE DATA
% --------------------------------------------------
[x,y] = meshgrid(-2:0.1:2, -2:0.1:2);
z = exp(-(x.^2+y.^2));
peak = max(z(:));

% ==================================================
% DEFINE LEVEL TO HIGHLIGHT AND ITS COLOR
% --------------------------------------------------
level = z(20,20);
color = [0,0,0];

cm = hsv;
nrows = size(cm,1);
row = round(nrows * level / peak);
cm(row,:) = color;

% ==================================================
% PLOT SURFACE WITH CUSTOM COLORMAP
% --------------------------------------------------
surf(x, y, z);
colormap(cm);

这是输出数字

Example

注意,如果您只想突出显示曲面中的特定像素而不是值,则可以使用surf定义颜色矩阵。以下是文档中的相关部分:

  

surf(X,Y,Z,C)使用C来定义颜色。 MATLAB®对此数据执行线性变换,以从当前色彩图中获取颜色。