修改颜色条刻度和颜色范围
Modify colorbar ticks and color range
这个问题是上一个关于 的问题的后续问题。
假设我有两个数组 A
和 B
,其中 A
是我感兴趣的要显示在颜色条中的数据点 (2D),B
是HSV颜色space转换而来的RGB图像,其中:Hue在[0.25-1]
区间(对应归一化A
值0.25-1),Saturation=1,Value在区间[0-1]
(对应其他一些值)。
当显示 B
和 imshow
时,我想创建一个匹配的颜色条,其刻度对应于 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])));
这个问题是上一个关于
假设我有两个数组 A
和 B
,其中 A
是我感兴趣的要显示在颜色条中的数据点 (2D),B
是HSV颜色space转换而来的RGB图像,其中:Hue在[0.25-1]
区间(对应归一化A
值0.25-1),Saturation=1,Value在区间[0-1]
(对应其他一些值)。
当显示 B
和 imshow
时,我想创建一个匹配的颜色条,其刻度对应于 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])));