Matlab: Farbspektrum für Plots

Farbspektren mit Matlab

(English) In diesem Post wird beschrieben, wie mit meiner Funktion für Matlab, ein Farbspektrum erzeugt werden kann, sodass verschiedene Plots alle verschiedene Farben haben.
Hierfür habe ich die Funktion geschrieben (Download):

function [CoolSpec] = ColSpec(a,q,value,start,m,k,inv)

Es kann also mit "a" die Anzahl der verschiedenen Farben im Bereich von rot über gelb zu grün zu blau und zu pink abgegeben werden. Mit dem Wert q wird der q'te Wert des Spektrums zurückgegeben. Mit "value" wird die Weite des Spektrums beschreiben also für Wert größer 1 wird sich die Farbe weniger ändern. "start" gibt den Startwert der Farbe an. Dabei ist rot (start = 0), gelb (start = 0.5), grün(start = 1), hellblau (start = 1.5-2), dunkelblau (start = 2.5) und pink (start = 3) und dann beginnts wieder von vorne. Mit "m" und "k" kann für kleinere Werte als 1 die Helligkeit der Kuven kontinuierlich verringert werden. Mit Werten "inv" kann für ungleich 0 das Spektrum von blau über grün nach rot verwendet werden.

Hier sind vier verschiedene Parameter beispielhaft gezeigt:




Quellcode:

function [CoolSpec] = ColSpec(a,q,value,start,m,k,inv)
% This Function creates a colorsweep for mulitple plots.
%Therefor "a" defines the amount of different colors
% "q" ist the qth value which is created
% "value" defines how far the sweep should be. So for value = 1
% the sweep goes form red to yellow to green to blue to violett.
%start is the value at which color you want to start.
%start = 0 --> red
%start = 0.5 --> yellow
%start = 1 --> green
%start = 1.5 - 2 --> brigthblue
%start = 2.5 --> darkblue
%start = 3 --> pink
%m and q handels the brigthness of th curve
%inv handels the inverted spectra from blue to red over over

if nargin <7
    inv = 0;
end
if nargin <6
    k=1;
end
if nargin <5
    m=0.9;
end
if nargin <4
    start = 0;
end
if nargin <3
    value=0.9;
end
alt = a;
a = a*value*1.2;
s = round(start*alt/3);
speed = 6;
c1=0;
c2=0;
c3=0;
for j=s:1:alt+s-1
    i=j;
    counter = j-s+1;
    if i>a;
        i = round(i-a);
    end
    if i<a/(3)
        r = 2*m-i/a*speed;
        g = i/a*speed;
        b = 0;      
    end
    if i>=a/(3) && i<2*a/(3)
        r = 0;
        g = 2*m-(i-a/(3))/a*speed;
        b = (i-a/(3))/a*speed;      
    end
    if i>=2*a/(3)
        r = (i-2*a/(3))/a*speed;
        g = 0;
        b = 2*m-(i-2*a/(3))/a*speed;      
    end
    %ROT
    if r<0
        r1 = 0;
    elseif r<1
        r1 = r;
    else
        r1=m;
    end
    %GRÜN
    if g<0
        g1 = 0;
    elseif g<1
        g1 = g;
    else
        g1=m;
    end
  
    if b<0
        b1 = 0;
    elseif b<1
        b1 = b;
    else
        b1=m;
    end
    %%%%%%%%%%%
    if r1==m
        c1 = c1+1;
        c1c(c1) = i;    
    end
    if g1==m
        c2 = c2+1;
        c2c(c2) = i;
    end
    if b1==m
        c3 = c3+1;
        c3c(c3) = i;
    end
    %%%%%%%%%%%
  
    %%%%%%%%%%%
    if inv == 0
        col = [k*r1 k*g1 k*b1];
    else
        col = [k*b1 k*g1 k*r1];
    end
    CoolSpec{j-s+1,:} = col;
    if i>alt;
        i = 0;
    end
end
if c1>2
    for i=2:1:c1
      
        if inv == 0
            CoolSpec{c1c(i),:} = CoolSpec{c1c(i),:}-[0.08*i 0 0];
        else
            CoolSpec{c1c(i),:} = CoolSpec{c1c(i),:}-[0 0 0.08*i];
        end
    end
end
if c2>2
    for i=2:1:c1
        if inv == 0
            CoolSpec{c2c(i),:} = CoolSpec{c2c(i),:}-[0 0.08*i 0];
        else
            CoolSpec{c2c(i),:} = CoolSpec{c2c(i),:}-[0 0.08*i 0];
        end
    end
end
if c3>2
    for i=2:1:c3
        if inv == 0
            CoolSpec{c3c(i),:} = CoolSpec{c3c(i),:}-[0 0 0.08*i];
        else
            CoolSpec{c3c(i),:} = CoolSpec{c3c(i),:}-[0.08*i 0 0];
        end
    end
end


if nargin > 1
    CoolSpec = CoolSpec{q,:};
end

Kommentare

Beliebte Posts aus diesem Blog

Matlab: Fehlergeraden

Matlab: 3D Kartesisches Grid, Vektoren mit Transformation/Rotation