我在MATLAB中绘制空间地图。我拥有的数据很少有值。
当我创建颜色条时,它的范围是0到80,但大多数值介于0到20之间。
如何修改MATLAB中的颜色条以显示颜色分区,以显示值> 20的单独颜色分区
所需的颜色条划分:[0, 4, 12, 16, 20, >20]
默认方式将颜色划分为相等的划分,随着颜色划分的较大部分的值介于20到70之间,变化会丢失。
我可以像caxis([0,20])
那样手动完成,但有没有办法让它自动化。
答案 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;