You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅使用现有colormap的部分区间实现自定义颜色映射?

调整Colormap映射以满足你的需求

有两种简单的方法可以实现你想要的效果,我先给你介绍最直接的一种——只需要调整caxis的范围,不需要修改原colormap:

方法一:调整颜色轴范围(Caxis)

你当前的caxis([-4 4])会把数值-4映射到colormap的第一个颜色(黄色),+4映射到最后一个颜色(亮粉色),而0正好对应colormap的中间位置(浅粉色)。要让-4直接对应这个中间颜色,我们只需要重新计算caxis的最小值,使得-4对应的归一化比例等于原来0的比例(0.5)。

通过解方程可以得出新的caxis最小值是-12,具体代码如下:

DataToPlot = pcolor(myData);
set(DataToPlot,'edgecolor','none'); % 移除网格线
colormap(flipud(spring));
% 调整caxis,让-4对应colormap中间的浅粉色,+4保持亮粉色
caxis([-12 4]);
colorbar;

原理说明

颜色映射的核心是把数值归一化到[0,1]区间,对应colormap的索引:

  • 原caxis([-4,4])时,归一化公式为:(x - (-4)) / (4 - (-4)) = (x+4)/8
  • 当x=0时,归一化值是0.5,对应colormap中间的浅粉色
  • 我们要让x=-4时归一化值也等于0.5,代入公式解方程:(-4 - cmin)/(4 - cmin) = 0.5,解得cmin=-12
  • 新的caxis([-12,4])下,x=-4的归一化值为(-4+12)/(4+12)=0.5,正好对应浅粉色;x=4的归一化值为1,保持亮粉色不变

方法二:自定义截取Colormap

如果你更倾向于直接修改colormap,也可以截取原flipud(spring)中从浅粉色到亮粉色的后半段作为新colormap,这样即使保持原caxis([-4,4]),也能实现你的需求:

DataToPlot = pcolor(myData);
set(DataToPlot,'edgecolor','none'); % 移除网格线
% 获取flipud后的spring colormap
cmap = flipud(spring);
% 截取从中间到末尾的部分(对应原0到+4的颜色区间)
half_idx = ceil(size(cmap,1)/2);
new_cmap = cmap(half_idx:end,:);
% 可选:插值扩展到默认的64个颜色,保持渐变平滑
new_cmap = interp1(linspace(0,1,size(new_cmap,1)), new_cmap, linspace(0,1,64), 'linear');
% 设置新colormap并保持原caxis
colormap(new_cmap);
caxis([-4 4]);
colorbar;

这个方法的好处是你能直观控制colormap的颜色范围,适合需要进一步调整渐变细节的场景。

内容的提问来源于stack exchange,提问作者dede

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:45:22