修改颜色条刻度和颜色范围

时间:2016-03-15 11:37:21

标签: matlab colorbar colormap

此问题是关于HSV color space的上一个问题的后续问题。

假设我有两个数组AB,其中A是我感兴趣的数据点(2D),显示在颜色栏中,B是从HSV颜色空间转换的RGB图像,其中:Hue在区间[0.25-1]中(对应于标准化A值0.25-1),饱和度= 1,区间[0-1]中的值(对应于其他一些价值观。)

使用B显示imshow时,我想创建一个匹配的颜色栏,其中的刻度与A的值范围相对应。

我面临的第一个困难是我希望我的Hue位于[0.25-1]区间,因此我只需要显示hsv颜色条的某个部分。

第二个困难是我需要匹配从A到颜色条的值范围。

示例代码:

A = rand(30,30)*0.4;        % Values range from 0 - 0.4
X = rand(30,30)*100+100;    % Values range from 100 - 200

A_n = A / (max(A(:))/0.75) + 0.25; % "Normalize", with range 0.25 - 1

X_n = X / max(X(:));               % Normalize, range 0 - 1

colorRGB = NaN([size(A),3]);       % preallocate

for ii = 1:size(A,1)     
  for jj = 1:size(A,2)
    colorRGB(ii,jj,:) = hsv2rgb([A_n(ii,jj),1,X_n(ii,jj)]); % turn into RGB
  end 
end

imshow(colorRGB),            % display image
colormap hsv; cb = colorbar(); 

在示例中,您可以看到颜色栏覆盖整个hsv范围,并且刻度为0 - 1.

我想要的只是显示hsv范围的上部75%,从0到最大的刻度(A(:))

假设max(A(:))= 0.35的正确颜色栏应如下所示:

Correct colorbar (你可以看到我刚裁剪它,但这也不是必需的)

1 个答案:

答案 0 :(得分:1)

为了做到这一点,你需要2件事。首先裁剪颜色条,设置其限制。其次,更改colobar标签中的文本,但为了确保它们位于rigth位置,您还需要手动设置它们的位置。希望代码有意义:

cb = colorbar(); 
set(cb, 'ylim', [25 100])
set(cb, 'XTick', [25:15:100])    % modify values if you preffer
set(cb,'XTickLabel',strsplit(num2str([0.25:0.15:1])));

enter image description here