2016-09-25 155 views
0

我正在閱讀的一本書包含下圖。MATLAB:填充多行之間的區域

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

我期待儘可能地複製在MATLAB如下圖。我設法重建線,但我有麻煩的填充顏色。

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 

隨着fill(F,H,colour_now)取出代碼完美重建所需的線路。但是,填充不正確。

這個heavily upvoted answer by @Doresoom似乎相關,但它有點不同,因爲在這個例子中,x值保持不變,而在我的情況下,y值保持不變。此外,在這種情況下,只有一對線,而我有很多。

回答

2

我認爲這是一個解決方案:

%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 

它允許以避免填充區域的重疊。

但是填寫區域的定義仍然存在一些問題。

對於您需要重新定義H

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

這出色的作品!你知道是否有一些簡單的方法來填充左上角和右下角的部分,即原始圖中的紫色和深藍色部分? – user1205197

+0

我編輯了這個問題。它現在應該完成這項工作 – shamalaia