fill area between two curves

조회 수: 325 (최근 30일)
Amir Hosein Shokouhy
Amir Hosein Shokouhy . 2022년 3월 16일
댓글: Voss . 2022년 3월 17일
I have two PSD graphs and I want to fill the area between them.
I used this code but it didn't work properly:
x2 = [f2(321:1921,:), fliplr(f2(321:1921,:))];
inBetween = [yconf(321:1921,1), fliplr(yconf(321:1921,2))];
fill(x2, inBetween, 'g');
Does anyone know how I can fix it?

채택된 답변

Voss 2022년 3월 16일
편집: Voss 님. 2022년 3월 16일
You should use flipud() or flip(_,1) or just use indexing (and do vertical concatenation with ; rather than horizontal concatenation with ,):
% some data similar to yours for the purpose of filling between:
f2 = linspace(0,30,64*30+1).';
yconf = -40*sin(f2)-40+[0 -20];
xlim([5 30]);
% fill using flip():
x2 = [f2(321:1921,:); flip(f2(321:1921,:),1)];
inBetween = [yconf(321:1921,1); flip(yconf(321:1921,2),1)];
fill(x2, inBetween, 'g');
xlim([5 30]);
% fill using indexing:
x2 = f2([321:1921 1921:-1:321],:);
inBetween = [yconf(321:1921,1); yconf(1921:-1:321,2)];
fill(x2, inBetween, 'g');
xlim([5 30]);
  댓글 수: 4
Voss 2022년 3월 17일
You're welcome!

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Davide Masiello
Davide Masiello 2022년 3월 16일
편집: Davide Masiello 님. 2022년 3월 16일
I think the problem might be that your y-values are column vectors, and therefore you create a matrix when you concatenate them using the comma.
Maybe this will work
x2 = [f2(321:1921,:), fliplr(f2(321:1921,:))];
inBetween = [yconf(321:1921,1)', fliplr(yconf(321:1921,2))'];
fill(x2, inBetween, 'g');


Help CenterFile Exchange에서 Spline Postprocessing에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by