Matlab色图对称约1

时间:2016-07-01 16:35:41

标签: matlab matlab-figure colormap

我有一个比例构造的数据,因此我想使用红色/白色/蓝色色图,其中白色分配给1,红色和蓝色环绕它。有一个简单的方法吗?

1 个答案:

答案 0 :(得分:2)

您可以使用interp1轻松构建蓝白色读取色图。这是一个小的匿名函数,它以整数作为输入并构造一个色图。

bwr = @(n)interp1([1 2 3], [0 0 1; 1 1 1; 1 0  0], linspace(1, 3, n), 'linear')
colormap(bwr(64));

要控制白色调用的位置,您需要设置轴的CLim。您需要将攀爬的中心围绕着想要变成白色的值。

set(gca, 'clim', [0 2])

作为一个完整的例子:

data = reshape(linspace(0, 100, 16), [4 4]) ./ 50;
figure
imagesc(data);
colormap(bwr(64));
colorbar;
set(gca, 'clim', [0 2])

enter image description here

请记住,因为你有比率,所以0和1之间的所有值都将被压缩,而值>从理论上讲,1可以一直到无穷大。 举个例子:

data = reshape(linspace(1, 200, 16), [4 4]) ./ 50;

enter image description here

要纠正此问题,您可以在绘图之前对数据进行对数转换,然后更改颜色条刻度线以表示初始比率值。

LData = log(data);
imagesc(LData)
colormap(bwr(64));

cbar = colorbar();

set(gca, 'clim', [-1 1] * max(abs(LData(:))))

cticks = get(cbar, 'Ticks');
cticklabels = arrayfun(@(x)sprintf('%0.2f', x), exp(cticks), 'uniformoutput', false);
set(cbar, 'TickLabels', cticklabels);

enter image description here