2016-09-25 169 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