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

30 views (last 30 days)
Bhaskar Ravishankar on 13 Mar 2020
Edited: Robert U on 17 Mar 2020
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.

Robert U on 13 Mar 2020
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 CommentsShowHide 1 older comment
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