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

Modify colorbar ticks and color range

这个问题是上一个关于 的问题的后续问题。

假设我有两个数组 AB,其中 A 是我感兴趣的要显示在颜色条中的数据点 (2D),B是HSV颜色space转换而来的RGB图像,其中:Hue在[0.25-1]区间(对应归一化A值0.25-1),Saturation=1,Value在区间[0-1](对应其他一些值)。

当显示 Bimshow 时,我想创建一个匹配的颜色条,其刻度对应于 A.

的值范围

我面临的第一个困难是我希望我的色相在 [0.25-1] 区间内,因此我只需要显示 hsv 颜色条的特定部分。

第二个难点是我需要匹配从A到colorbar的值域。


示例代码:

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 到 max(A(:))

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

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

为此,您需要两件事。首先裁剪颜色条,设置它的限制。其次,更改colobar标签中的文字,但要确保它们在正确的位置,您还需要手动设置它们的位置。希望代码有意义:

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])));