2017-02-22 68 views
2

Есть много вопросов, уже на этом сайте что-то подобное:MATLAB Shading область между кривыми НЕСКОЛЬКИХ

MATLAB, Filling in the area between two sets of data, lines in one figure

MATLAB fill area between lines

Однако, все существующие вопросы касаются только двух кривых. Как вы заполняете область, ограниченную несколькими кривыми, которые перекрывают друг друга?

Неочищенный пример может быть:

% Create sample data as column vectors. 
x = [1 : 100]'; 
curve1 = x/10; 
curve2 = log(x/2) + rand(length(x), 1) - 0.5; 
curve3 = log(x) + rand(length(x), 1) + 0.5; 
% Plot it. 
plot(x, curve1, 'r', 'LineWidth', 2); 
hold on; 
plot(x, curve2, 'b', 'LineWidth', 2); 
plot(x, curve3, 'k', 'LineWidth', 2); 

для затенения: верхнего предел будет черным кривой с последующим красной линией.

Нижним пределом будет синяя кривая (кратковременно), затем красная линия, за которой следует синяя кривая.

В моем фактическом наборе данных у меня есть 10 кривых, которые требуют подобной вещи.

ответ

1

Если я вас понимаю правильно, вы можете сделать это, создав min и max векторов области, которую хотите затенять, и используйте flipud, чтобы закрасить область с помощью fill

min_data=min([curve1,curve2,curve3],[],2); 
max_data=max([curve1,curve2,curve3],[],2); 

fill([x;flipud(x)],[min_data;flipud(max_data)],'g') 

enter image description here

+0

Спасибо! Именно то, что я искал. – luks

0

Если я правильно вас понял:

basevalue = min([curve1(:) ; curve2(:) ; curve3(:)]); 
h = area([curve2 , curve1-curve2 , curve3-curve1],basevalue) 
h(1).FaceColor = [1 1 1]; 
h(2).FaceColor = [0 0.5 0.5]; 
h(3).FaceColor = [1 1 1]; 
hold on 
plot(x, curve1, 'r', 'LineWidth', 2); 
plot(x, curve2, 'b', 'LineWidth', 2); 
plot(x, curve3, 'k', 'LineWidth', 2); 
ylim([ min([curve1(:) ; curve2(:) ; curve3(:)]); max([curve1(:) ; curve2(:) ; curve3(:)])]) 

enter image description here

Таким образом, вы должны играть с областью таким образом, что согласуется с тем, что вы хотите ...

+0

Не совсем! Область под красной линией и черная кривая в правой части графика также должны быть заштрихованы. Для «левой» стороны графика участок под черной кривой и над красной линией также должен быть затенен. – luks

+0

, но это область, которая затенена (ниже красной линии и черной кривой в правой части). ваш комментарий не ясен. пожалуйста, обновите вопрос в области, которую вы хотите затенять (сделайте это в маске MS или что-то в этом роде). также, попытайтесь понять, что я сделал, потому что ответ будет вариацией этого, – bla