我的数据在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的值,这是我想要使用自定义颜色的那个。
答案 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);
这是输出数字
注意,如果您只想突出显示曲面中的特定像素而不是值,则可以使用surf定义颜色矩阵。以下是文档中的相关部分:
surf(X,Y,Z,C)使用C来定义颜色。 MATLAB®对此数据执行线性变换,以从当前色彩图中获取颜色。