我有一个比例构造的数据,因此我想使用红色/白色/蓝色色图,其中白色分配给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])
请记住,因为你有比率,所以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);