Matlab 颜色图关于 1 对称

Matlab colormap symmetric about 1

我有按比率构造的数据,因此我想使用 red/white/blue 颜色图,其中白色分配给 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。您将希望以您希望变白的价值观为中心。

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