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);
我有按比率构造的数据,因此我想使用 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);