如何在MATLAB中自动调整色条?

问题描述 投票:1回答:3

我正在MATLAB中绘制空间地图。我拥有的数据很少有大数值。

当我创建颜色条时,它的范围从0到80,但大多数值介于0到20之间。

下面是值enter image description here的直方图

如何在MATLAB中修改颜色条以显示颜色分区,以便为值> 20显示单独的颜色分区

所需的颜色条划分:[0, 4, 12, 16, 20, >20]

默认方式将颜色划分为相等的划分,并且随着颜色划分的较大部分变为20到70之间的值,变化会丢失。

我可以像caxis([0,20])一样手动完成,但有任何方法可以实现自动化。

matlab spatial colorbar colormap
3个回答
1
投票

这样的事情应该做:

% Assume your data is stored in x & y
b = bar(x,y,'FaceColor','flat');
thresholds = 0:4:20;
colours = {'r';'b';'g';'y';'c'}; % for example
for k = 1:length(thresholds)
    b(x>thresholds(k),:).CData = colours{k};
end

我没有测试它,没有你的数据,但希望应该工作。


1
投票

以下代码应自动设置颜色栏的上限,其中大约80%的点低于该值(80%可以更改,值与80%的接近程度取决于使用的箱数)

假设数据在变量data

[n,edges] = histcounts(data,'Normalization','cumcount');
limit = edges(find(n/length(data)>0.8,1)+1); %change 0.8 here to preferred fraction
caxis([0,limit])

0
投票

如果要绘制不等数据的扩展,可以将值缩放/标准化为[0,1]的范围。

range = max(data) - min(data);
data = (data - min(data)) / range;

如果要缩放到[x,y]的任何给定范围,首先归一化为[0,1],然后:

range2 = y - x;
data = (dataa * range2) + x;

把它们放在一起:

function normalized = normalize_var(array, x, y)

 % Normalize to [0, 1]:
 m = min(array);
 range = max(array) - m;
 array = (array - m) / range;

 % Then scale to [x,y]:
 range2 = y - x;
 normalized = (array*range2) + x;
© www.soinside.com 2019 - 2024. All rights reserved.