如何仅使用现有色彩映射的一部分?

时间:2018-04-11 10:01:00

标签: matlab visualization data-visualization matlab-figure colormap

我正在使用色彩映射来显示一些数据:

DataToPlot = pcolor(myData);
set(DataToPlot,'edgecolor','none'); %to remove grid
colormap(flipud(spring));
caxis([-4 4]);
colorbar;

此时与值-4关联的颜色为黄色,与+4关联的颜色为亮粉色。我想修改此比例,并将-4颜色与0(浅粉红色)的颜色相关联,并将与+4相关联的颜色保留为亮粉色。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

让我们考虑以下示例:

figure(); imagesc(magic(4)-8); colorbar;
% Flipped "spring" colormap:
cm = flipud(spring); colormap(cm);

现在我们有:

Flipped <code>spring</code>

如果我们只需要色图的子集(例如黄色到粉红色),我们可以获取spring返回的数组行的子集:

cm = flipud(spring(200)); colormap(cm(1:100,:));

其中200是我们想要获得的色彩映射的分辨率,而100大约是我们想要剪切的地图的位置,产生:

First half of the flipped <code>spring</code>

如果我们想重新缩放色彩图(或换句话说,将数据映射到颜色,使得最小值/最大值不对应于底色/顶色),我们可以使用caxis函数来为colormap设置不同的限制。例如:

cm = flipud(spring); colormap(cm); caxis([-7 24]);

使用完整的色彩映射产生相同的数据着色:

Rescaled colormap

奖励:不要忘记你也可以组合不同的色彩映射:

cm = [flipud(bone(50)); copper(50)]; colormap(cm);

enter image description here