Matlab:如何使用合适的颜色条?
Matlab: How to use a suitable color bar?
我有一张图片显示了一些颜色值的大小,比如这张:
星等越高,看起来越红。然而,边缘只有少数点具有非常高的值,而大多数点具有低得多的值。如果使用等间隔的colorbar的话,整个图片看起来都是蓝色的,大部分区域的值都无法区分。
是否可以设置一个颜色条,比如说,间隔呈指数增长(或其他),以便中心部分也可以显示不同的颜色?
这是一种方法,不太正确,但很接近。这个想法是制作您自己的对数间隔颜色图。我通过在对数间隔断点之间使用线性插值来实现。使用 logarithmic interpolation 可能会有所改进(并且可能有更好的最终情况):
首先我模拟了一些数据(接受有关模拟数据的建议,以更好地说明这个例子):
M = exp(rand(50)*10)
然后画出来(忽略figure(2)
,只是为了让这个和后面的图像匹配)
n = 64
figure(2)
imagesc(M)
colormap(jet(n))
colorbar
现在创建一个对数间隔颜色图
linMap = jet(n);
breaks = round(0:n/5:n)';
breaks(1) = 1;
cBreaks = linMap(breaks,:);
idx = 2.^(6:-1:1)';
idx(end) = 0; %// this part is hacky
logMap = interp1(((idx)/64)*max(M(:)),flipud(cBreaks),linspace(0,max(M(:)),64)); %// based on
figure(1)
imagesc(M)
colormap(logMap)
colorbar
结果
如您所见,数据保持不变,数据检查器仍然返回相同的值,但颜色条现在几乎是对数刻度。我很想看看这在您的数据中是什么样子。
我有一张图片显示了一些颜色值的大小,比如这张:
星等越高,看起来越红。然而,边缘只有少数点具有非常高的值,而大多数点具有低得多的值。如果使用等间隔的colorbar的话,整个图片看起来都是蓝色的,大部分区域的值都无法区分。
是否可以设置一个颜色条,比如说,间隔呈指数增长(或其他),以便中心部分也可以显示不同的颜色?
这是一种方法,不太正确,但很接近。这个想法是制作您自己的对数间隔颜色图。我通过在对数间隔断点之间使用线性插值来实现。使用 logarithmic interpolation 可能会有所改进(并且可能有更好的最终情况):
首先我模拟了一些数据(接受有关模拟数据的建议,以更好地说明这个例子):
M = exp(rand(50)*10)
然后画出来(忽略figure(2)
,只是为了让这个和后面的图像匹配)
n = 64
figure(2)
imagesc(M)
colormap(jet(n))
colorbar
现在创建一个对数间隔颜色图
linMap = jet(n);
breaks = round(0:n/5:n)';
breaks(1) = 1;
cBreaks = linMap(breaks,:);
idx = 2.^(6:-1:1)';
idx(end) = 0; %// this part is hacky
logMap = interp1(((idx)/64)*max(M(:)),flipud(cBreaks),linspace(0,max(M(:)),64)); %// based on
figure(1)
imagesc(M)
colormap(logMap)
colorbar
结果
如您所见,数据保持不变,数据检查器仍然返回相同的值,但颜色条现在几乎是对数刻度。我很想看看这在您的数据中是什么样子。