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

时间:2017-12-21 11:06:11

标签: matlab spatial colorbar colormap

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

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

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

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

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

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

我可以像caxis([0,20])那样手动完成,但有没有办法让它自动化。

3 个答案:

答案 0 :(得分: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 :(得分: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])

答案 2 :(得分: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;