在Matlab中创建具有自定义限制和平滑颜色过渡的自定义颜色图

时间:2019-03-28 20:34:58

标签: matlab colors colormap

我想将任何数字0<=f<=1转换为四个类别green, yellow, orange and red给定的rbg代码。我可以通过以下功能来实现:

function [rgb,myColor]=colorCode(f)
cm = [0 1 0;1 1 0;255/255 153/255 51/255;1 0 0];
colorID = max(1, sum(f > [0:1/length(cm(:,1)):1])); 
myColor = cm(colorID, :);
rgb = uint8(myColor*255+0.5);

现在,我想对此做2处改进:

1.-上面的代码将间隔[0,1]分成四个相等的部分,即:

[0,0.25]>green
[0.25,0.5]>yellow
[0.5,0.75]>orange
[0.75,1]>red

但是我想定义自定义间隔,例如:

[0,0.3]>green
[0.3,0.5]>yellow
[0.5,0.7]>orange
[0.7,1]>red

2.-我希望颜色间隔之间的过渡更加平滑。现在,介于0.25和0.26之间的颜色突然从绿色变为黄色。这个想法是从绿色到绿色-黄色-黄色到从黄色-绿色-黄色到黄色,并且与其他过渡类似。现在,我必须向cm色图矩阵中添加更多行,但是我不知道如何。...

1 个答案:

答案 0 :(得分:1)

function [rgb,myColor]=colorCode(f)
n=length(f);
switch n
    case 1
        cm = [0 1 0;1 1 0;255/255 128/255 0/255;1 0 0;1 0 0];
        x=[0 0.3 0.5 0.7 1];
        cm = interp1(x,cm, linspace(0, 1, 255));
        colorID = max(1, sum(f > [0:1/length(cm(:,1)):1])); 
        myColor = cm(colorID, :); % returns your color
        rgb = uint8(myColor*255+0.5);
    otherwise
        rgb=zeros(n,3);
        myColor=rgb;
        for i=1:n
            [rgb(i,:),myColor(i,:)]=colorCode(f(i));
        end
end