0

我将数据标准化为 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];

我现在认为这是由于轮廓的工作方式而发生的。对于发布的示例,应该只有值等于一,这就是我想要使用自定义颜色的值。

4

1 回答 1

0

以下是创建突出显示单个级别值的自定义颜色图的示例。在这种情况下,峰为黑色。您可以调整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);

这是输出图

例子

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

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

于 2015-08-16T18:17:54.367 回答