【问题标题】:Modify colorbar ticks and color range修改颜色条刻度和颜色范围
【发布时间】:2016-03-15 11:37:21
【问题描述】:

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

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

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

我面临的第一个困难是我希望我的色调在[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 到 max(A(:))

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

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

【问题讨论】:

  • 你能真正展示你是如何做到的吗?代码
  • 尝试发布 MCVE:stackoverflow.com/help/mcve
  • @Ander Biguri 添加了一个 MCVE。我希望现在能更清楚一点。

标签: matlab colorbar colormap


【解决方案1】:

为了做到这一点,你需要做两件事。首先裁剪颜色条,然后设置其限制。其次,更改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])));

【讨论】:

  • 谢谢,这正是我想要的!我必须这样写才能工作 (/100): set(cb, 'ylim', [.25 1]);设置(cb,'XTick',.25:.15:1);也许您可以将其添加到您的答案中,不知道为什么,也许是 R2016a?
  • @Johannes 取决于我认为的数据。但只要你有这个想法,那就好! ;)
猜你喜欢
  • 1970-01-01
  • 2020-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-13
  • 1970-01-01
  • 2012-03-28
  • 1970-01-01
相关资源
最近更新 更多