2016-09-25 5 views
0

Ein Buch, das ich lese, enthält das folgende Diagramm.MATLAB: Füllen des Bereichs zwischen mehreren Zeilen

ORSS with False Alarm rate on x-axis and Hit Rate on y-axis

Ich suche so nah wie möglich das folgende Diagramm in MATLAB zu replizieren. Ich schaffte es die Linien neu zu erstellen, aber Probleme habe in den Farben zu füllen.

possible_colours = {'r','g','b','c','m','y','w','k','r'}; 

H = [0.01:0.01:0.99]; 

colour_counter = 0; 

for ii = -0.8:0.2:0.8 
    colour_counter = colour_counter + 1; 
    colour_now = possible_colours{colour_counter}; 
    ORSS = ones(1,size(H,2))*ii; 
    F = (H .* (1-ORSS)) ./ ((1-2.*H) .* ORSS + 1); 
    hold on  
    plot(F,H) 
    fill(F,H,colour_now);  
end 

Mit fill(F,H,colour_now) der Code herausgenommen perfekt die erforderlichen Linien nachbildet. Die Füllung ist jedoch nicht korrekt.

Diese heavily upvoted answer von @Doresoom scheint relevant, aber es ist ein bisschen anders, weil in diesem Beispiel die x-Werte konstant gehalten werden, während in meinem Fall sind es die y-Werte, die konstant gehalten werden. Auch in diesem Fall gibt es nur ein Paar Linien, während ich viele davon habe.

Antwort

2

Ich denke, dies ist eine Lösung:

%possible_colours = {'r','g','b','c','m','y','w','k','r'}; 
possible_colours = {'r','g','b','c','r','k','w','y','m'}; 

H = [0.01:0.01:0.99]; 

figure; hold on 
fill([0 1 1],[0 0 1],colorlowerhalf) 
fill([0 1 0],[0 1 1],colorupperhalf) 

colour_counter = 0; 

for ii = -0.8:0.2:0 
    colour_counter = colour_counter + 1; 
    colour_now = possible_colours{colour_counter}; 
    ORSS = ones(1,size(H,2))*ii; 
    F = (H .* (1-ORSS)) ./ ((1-2.*H) .* ORSS + 1); 
    hold on  
    plot(F,H) 
    fill(F,H,colour_now);  
end 

for ii = 0.8:-0.2:0 
    colour_counter = colour_counter + 1; 
    colour_now = possible_colours{colour_counter}; 
    ORSS = ones(1,size(H,2))*ii; 
    F = (H .* (1-ORSS)) ./ ((1-2.*H) .* ORSS + 1); 
    hold on  
    plot(F,H) 
    fill(F,H,colour_now);  
end 

Es erlaubt die Überlappung der gefüllten Flächen zu vermeiden.

Aber es gibt immer noch ein Problem mit der Definition der Bereiche zu füllen.

Dafür benötigen Sie H neu zu definieren:

H = [0:0.01:1]; 
+0

Das brillant funktioniert! Weißt du, ob es eine einfache Möglichkeit gibt, die Abschnitte oben links und unten rechts auszufüllen, d. H. Die Abschnitte im Originaldiagramm in lila und dunkelblau? – user1205197

+0

Ich habe die Frage bearbeitet. Es sollte jetzt den Job machen – shamalaia

Verwandte Themen