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

26 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 CommentsShow NoneHide None
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 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