Matlab颜色映射对称约1

Matlab颜色映射对称约1,matlab,matlab-figure,colormap,Matlab,Matlab Figure,Colormap,我的数据是以比率的形式构建的,因此我想使用一个红/白/蓝颜色贴图,其中白色被指定为1,红色和蓝色环绕它。有没有一种简单的方法可以做到这一点?您可以使用interp1轻松构建一个蓝白读取彩色地图。这里有一个匿名函数,它接受一个整数作为输入,并构造一个颜色映射 bwr = @(n)interp1([1 2 3], [0 0 1; 1 1 1; 1 0 0], linspace(1, 3, n), 'linear') colormap(bwr(64)); 要控制白色调用的位置,您需要设置轴的CLi

我的数据是以比率的形式构建的,因此我想使用一个红/白/蓝颜色贴图,其中白色被指定为1,红色和蓝色环绕它。有没有一种简单的方法可以做到这一点?

您可以使用
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
。您将希望将clims集中在希望为白色的值周围

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])

请记住,由于有一个比率,所以0和1之间的所有值都将被压缩,而大于1的值理论上可以一直压缩到无穷大。 例如:

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

要纠正这一点,您可以在打印之前对数据进行日志转换,然后更改颜色栏标记以表示初始比率值

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);