How to shade and calculate area above a reference line in a plot?

27 views (last 30 days)
Hello,
In the attached plot, I want to shade the area ONLY ABOVE the 0-crossing line without losing the curve below the 0-line.
I also want to calculate the area above the 0-crossing line.
I searched the community for answers and found several solutions to similar questions but it was not specific to this issue.
Could someone please help me? I would very much appreciate a code snippet to help solve this issue.
Thank you.

Answers (1)

Robert U
Robert U on 13 Mar 2020
Hi Bhaskar Ravishankar,
You can use area and logical indexing in order to shade the curve:
resX = 0.1;
xlim = [-pi,pi];
x = xlim(1):resX:xlim(2);
y = 1 * sin( x );
fh = figure;
ah = axes(fh);
hold(ah,'on');
ah.XGrid = 'on';
ah.XMinorGrid = 'on';
ah.YGrid = 'on';
ah.YMinorGrid = 'on';
plot(ah,x,y,'-black');
area(ah,x(y>=0),y(y>=0)); % in order to suppress the visual uncertainties you would have to split the area, or make sure to hit the zero crossings.
Integral of the area with non-negative values:
intArea = sum(y(y>=0)*resX);
Kind regards,
Robert
  2 Comments
Bhaskar Ravishankar
Bhaskar Ravishankar on 16 Mar 2020
Hi Robert,
I tried this technique with my code and I saw that the -ve portion of my graph disappears when I use area the area command. I'm not able to figure out why. Any suggestions?
I used the 'hold on' command after I plotted the graph before the area command but it gave me completely different results. Not sure what happened there.
The x limits were the same. But it didn't work.
Robert U
Robert U on 17 Mar 2020
Edited: Robert U on 17 Mar 2020
Probably, you have not enough data points available. Try to remesh your xdata, interpolate the y-data using linear interpolation and then use area command on your interpolated data.
If you want more than generic help, post your code and data.
Kind regards,
Robert

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!