更改scilab colorbar中的颜色间隔

时间:2017-03-08 08:48:39

标签: plot colorbar scilab

我想更改Scilab中颜色条中的颜色间隔,以便不会有不同部分的恒定高度。

我能够使用以下代码更改yticks位置以及yticks的数量:

fig= gcf();
   cb = fig.children(1);
   cb.font_size = 3;
   cb.auto_ticks(2)="off";
   cb.y_ticks = tlist(["ticks","locations","labels"], yticks, string(yticks));

但我无法找到改变颜色变化位置的方法。我在colorbar函数中搜索过,我认为解决方案可能在函数的以下部分,但我不太确定,而且我也不知道如何更改代码。

   //draw the colorbar
    y = linspace(umin,umax,nb_colors)
    col=[colminmax(1):colminmax(2)]
    Sgrayplot([0 1],y,[col;col],colminmax=colminmax)

要更清楚地了解所需结果,请参阅下图。我希望不同颜色的边界正好落在我的yticks所在的位置。

Deisred result

1 个答案:

答案 0 :(得分:0)

实现此目的的一种方法是定义自己的色彩映射表。以下是我的习惯"逆转" jetcolormap代码。通过更改rgb数组,您可以修改颜色。如果您不需要灵活处理不同数量的颜色,则可以使用硬编码的值替换插值的cmap值。如果您需要在颜色变化之间保持不相等的距离,只需多次定义相同的颜色,即:白色,白色,粉红色,红色,红色,红色......

//modification from jetcolormap
//reversing color order
function [cmap] = reverse_jetcolormap(varargin)
    // Check number of input argument
    if size(varargin)<>1 then
        error(msprintf(gettext("%s: Wrong number of input argument(s): %d expected.\n"), "reverse_jetcolormap", 1));
    end
    n=varargin(1);

    // Check type of input argument
    if typeof(n)<>"constant" then
        error(msprintf(gettext("%s: Wrong type for input argument #%d: An integer value expected.\n"), "reverse_jetcolormap", 1));
    end

    // Check if input argument is real
    if ~isreal(n) then
        error(msprintf(gettext("%s: Wrong type for input argument #%d: An integer value expected.\n"), "reverse_jetcolormap", 1));
    end

    // Check size of input argument
    if size(n,"*")<>1 then
        error(msprintf(gettext("%s: Wrong size for input argument #%d: An integer value expected.\n"), "reverse_jetcolormap", 1));
    end

    if n==0 then
        cmap = [];
        return
    end


//    r = [0.000 0.125 0.375 0.625 0.875 1.000 ; 0.000 0.000 0.000 1.000 1.000 0.500]
//    g = [0.000 0.125 0.375 0.625 0.875 1.000 ; 0.000 0.000 1.000 1.000 0.000 0.000]
//    b = [0.000 0.125 0.375 0.625 0.875 1.000 ; 0.500 1.000 1.000 0.000 0.000 0.000]

    r = [0.000 0.125 0.375 0.625 0.875 1.000 ; 0.500 1.000 1.000 0.000 0.000 0.000]
    g = [0.000 0.125 0.375 0.625 0.875 1.000 ; 0.000 0.000 1.000 1.000 0.000 0.000]
    b = [0.000 0.125 0.375 0.625 0.875 1.000 ; 0.000 0.000 0.000 1.000 1.000 0.500]

    d = 0.5/max(n,1);
    x = linspace(d,1-d, n)
    cmap = [ interpln(r, x);...
    interpln(g, x);...
    interpln(b, x) ]';
    cmap = min(1, max(0 , cmap))  // normaly not necessary
endfunction