首页 > 解决方案 > Matlab颜色条pcolor

问题描述

我有一张以 pcolor 显示潮汐混合前沿的地图,我想自定义颜色条。

零值应该是灰色的。0.1 和 2.5 之间的值应该是白色的。介于 2.5 和 6 之间的任何东西都应该是彩色的(比如 jet colorbar 之类的)。

到目前为止,我已经尝试了下面的代码,它有效,但理想情况下,我希望彩色位更像是渐变而不是块颜色。

pcolor(log10(hu'));
shading interp;
caxis([0 6]);
map = [0 0 0
    0.9 0.9 0.9
    0.9 0.9 0.9
    0.9 0.9 0.9
    0 0 0.3
    0 0 0.6
    0 0 0.9];
colormap(map);

任何建议表示赞赏!谢谢

标签: matlabcolorbarcolormap

解决方案


您可以通过尊重要分离的不同间隔的比例来构建自定义颜色图。

对于您的示例,数据由 [0 6] 域绑定,您可以选择一个简单的 60 色(=60 行)颜色图。

  • 第一行(映射到 value 0)设置为灰色
  • 第 1 到 25 行(映射从 0.1 到 2.5 的值)应该是白色的
  • 第 26 到 60 行(将值从 2.6 映射到 6.0)应该是渐变颜色图

当然,如果您想提高分辨率,可以将这些行数乘以一个系数,只要遵守行数的比率即可。

要在代码中查看它,我首先需要创建一些示例数据(您没有提供最小的工作示例!!):

%% Sample data
camax = 6 ;
Z = peaks(50) ;
% normalise Z so the data are bound within [0 6]
zmax = max(max(Z)) ; zmin = min(min(Z)) ; zspan = zmax-zmin ;
Zn = ((Z-zmin)./zspan ) * camax ;
% plot
hp=pcolor(Zn);
shading interp;
hb = colorbar ;

这将在左侧生成下图。

现在创建并应用您的自定义颜色图:

%% Build and apply colormap
granularity_factor = 1 ;    % increase that for higher resolution

levels  = [0 0.1 2.5 6] ;   % Your different levels
dl      = diff(levels) ;    % The "span" of each interval between level = [0.1, 2.4, 3.5]

color0 = [.7 .7 .7] ;   % Grey
color1 = [1 1 1] ;      % White

% Number of lines in the colormap for each interval
nlines = round( dl * 10 * granularity_factor ) ; % = [1, 24, 35] lines for each interval

% Now build the colormap
cmap = [
    repmat( color0 , nlines(1) ,1 ) ; ...   % 1 line of this color
    repmat( color1 , nlines(2) ,1 ) ; ...   % 24 lines of this color
    parula( nlines(3) ) ...                 % 35 lines of "parula" colormap
    ] ;
    
colormap(cmap)                  % Apply it
hb.Ticks = [0.1 2.5:0.5:6] ;    % Adjust ticks on colorbar (optional)

这将在右侧生成下图。

在此处输入图像描述

正如我所说,granularity_factor如果您需要更精致的颜色图,请增加。


编辑:我应该知道这已经在这里了。您可以看到一个几乎重复/类似的问题,它使用我刚刚描述的相同技术来回答:如何在 Matlab 图中控制颜色条颜色范围?


推荐阅读