2016-09-25 3 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 от @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

Смежные вопросы