MATLAB:填充多行之间的区域

时间:2016-09-25 11:32:27

标签: matlab plot fill

我正在阅读的一本书包含下图。

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)后,代码可以完美地重新创建所需的行。但是,填充不正确。

@Doresoom的这个heavily upvoted answer似乎是相关的,但它有点不同,因为在那个例子中,x值保持不变,而在我的情况下,它是保持不变的y值。此外,在这种情况下,只有一对线,而我有很多。

1 个答案:

答案 0 :(得分: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];