fill area between two curves

260 visualizzazioni (ultimi 30 giorni)
Amir Hosein Shokouhy
Amir Hosein Shokouhy il 16 Mar 2022
Commentato: Voss il 17 Mar 2022
Hello,
I have two PSD graphs and I want to fill the area between them.
I used this code but it didn't work properly:
figure(3)
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?
Thanks,
Amir

Risposta accettata

Voss
Voss il 16 Mar 2022
Modificato: Voss il 16 Mar 2022
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];
plot(f2,yconf);
xlim([5 30]);
% fill using flip():
figure()
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:
figure()
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 Commenti
Amir Hosein Shokouhy
Amir Hosein Shokouhy il 16 Mar 2022
Thank you very much!
Voss
Voss il 17 Mar 2022
You're welcome!

Accedi per commentare.

Più risposte (1)

Davide Masiello
Davide Masiello il 16 Mar 2022
Modificato: Davide Masiello il 16 Mar 2022
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
figure(3)
x2 = [f2(321:1921,:), fliplr(f2(321:1921,:))];
inBetween = [yconf(321:1921,1)', fliplr(yconf(321:1921,2))'];
fill(x2, inBetween, 'g');

Categorie

Scopri di più su Graphics Object Properties in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by