【问题标题】:create custom colormap with custom limits and smooth color transition in matlab在 matlab 中创建具有自定义限制和平滑颜色过渡的自定义颜色图
【发布时间】:2019-08-19 17:54:22
【问题描述】:

我想将任意数字0<=f<=1 转换为由四个类别green, yellow, orange and red 给出的rb​​g 代码。我可以通过以下功能实现:

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 颜色图矩阵添加更多行,但我不知道如何....

【问题讨论】:

标签: matlab colors colormap


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 2019-03-08
    相关资源
    最近更新 更多