如何只使用现有颜色图的一部分?

How to use only a part of an existing colormap?

我正在使用颜色图可视化一些数据:

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

目前与值 -4 关联的颜色是黄色,与 +4 关联的颜色是亮粉色。我想修改这个比例尺,并将与 -4 相关联的颜色作为现在 0 的颜色(浅粉色),并将与 +4 相关联的颜色保留为亮粉色。

我该怎么做?

让我们考虑以下示例:

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

现在我们有:

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

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

其中200是我们要得到的colormap的分辨率,100大概是我们要切割的图的位置,得到:

如果我们想重新缩放颜色图(或者换句话说,改变数据到颜色的映射,使得 min/max 值不对应于 bottom/top 颜色),我们可以使用 caxis 函数为颜色图设置不同的限制。例如:

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

使用完整的颜色图产生相同的数据着色:

奖励:别忘了您还可以组合不同的颜色图:

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