代码之家  ›  专栏  ›  技术社区  ›  SecretAgentMan Dor Budkov

在Matlab中控制色标

  •  0
  • SecretAgentMan Dor Budkov  · 技术社区  · 7 年前

    问题: 如何在自定义的Matlab颜色栏中指定颜色转换?
    明确地, 我想让黄色(见下文)覆盖色条的更多区域(可能是[19.5–21.5]或类似的区域)。

    使用 this answer ,我可以在Matlab中创建自定义颜色栏。我在试着理解 this answer 可能是相关的。

    我试图从 this answer 并回顾 this answer 和; this one 无法完成我的目标。

    Example plot w/ current colorbar and illustration of desired colorbar

    下面是完整的代表性示例 (Matlab r2017a)

    % Data
    X = [22.6 22.8 22.6 20.45 22.3 18.15 19.95 20.8]';
    Y = [84 89 63 81 68 83 77 52]';
    Z = [23.0 22.695 21.1450 21.5 22.09 20.5 22.075 20.915]';
    
    % Create custom colormap  
    % Reference: https://stackoverflow.com/questions/24488378/how-to-map-a-specific-value-into-rgb-color-code-in-matlab/24488819#24488819
    col3 = [0 1 0]; %G
    col2 = [1 1 0]; %Y
    col1 = [1 0 0]; %R
    n1 = 20; n2 = 20;
    cmap=[linspace(col1(1),col2(1),n1);linspace(col1(2),col2(2),n1);linspace(col1(3),col2(3),n1)];
    cmap(:,end+1:end+n2)=[linspace(col2(1),col3(1),n2);linspace(col2(2),col3(2),n2);linspace(col2(3),col3(3),n2)];
    cmap = cmap';
    
    % Plot
    colormap(cmap), hold on, box on
    p = scatter(X,Y,[],Z,'filled','DisplayName','Data3');
    cb = colorbar;
    cb.Limits = [18 23];
    cb.Ticks = [18:1:23];
    
    % Cosmetics
    p.MarkerEdgeColor = 'k';
    xlabel('X')
    ylabel('Y')
    cb.Label.String = 'Z';
    
    0 回复  |  直到 7 年前
        1
  •  2
  •   gnovice    7 年前

    我想你只缺一个电话 caxis 要指定要将颜色范围映射到的最小值和最大值,请执行以下操作:

    caxis([18 23]);
    

    enter image description here

    注意下面这一行…

    cb.Limits = [18 23];
    

    …只改变 tick limits 显示 在颜色栏上,但不会更改数据映射到颜色范围的方式。这个 卡西斯 函数是如何控制的(在上面的例子中,将18的值映射到一端,23的值映射到另一端)。默认情况下,您的代码在 Z 颜色范围(分别为20.5和23)。然后将颜色栏上的刻度限制设置为更大的范围时,它只是用颜色映射中的最后一种颜色填充它,在本例中为红色。这就是为什么你能看到这么多。

    奖金

    仅仅因为您可能感兴趣,您还可以通过 interp1 函数可以轻松生成颜色贴图,如下所示:

    cmap = interp1([1 0 0; 1 1 0; 0 1 0], linspace(1, 3, 41));