我正在MATLAB中绘制空间地图。我拥有的数据很少有大数值。
当我创建颜色条时,它的范围从0到80,但大多数值介于0到20之间。
如何在MATLAB中修改颜色条以显示颜色分区,以便为值> 20显示单独的颜色分区
所需的颜色条划分:[0, 4, 12, 16, 20, >20]
默认方式将颜色划分为相等的划分,并且随着颜色划分的较大部分变为20到70之间的值,变化会丢失。
我可以像caxis([0,20])
一样手动完成,但有任何方法可以实现自动化。
这样的事情应该做:
% 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
我没有测试它,没有你的数据,但希望应该工作。
以下代码应自动设置颜色栏的上限,其中大约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,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;