Search code examples
matlabplotmatlab-figureareacurve

Shade and calculate specific area


I tried to change the code in a way so that only the first area is shaded grey. How can I set the horizontal line in a way that it only appears under the area I want to shade?

Furthermore I want to calculate the area of ONE region. How do I achieve that? I know it is trapz but I am not sure how to set the boundaries. Thanks!

x = 0:.01:4*pi;  %// x data
y = sin(x);      %// y data
level = 0.5;     %// level
plot(x, y)
hold on
area(x, max(y, level), level, 'EdgeColor', 'none', 'FaceColor', [.7 .7 .7])

Curve:-
Curve


Solution

  • you can try also this simple option:

    x = 0:.01:4*pi;  %// x data
    y = sin(x);      %// y data
    level = 0.5;     %// level
    lineStart = find(y>=level,1);
    lineEnd = find(y(lineStart:end)<=level,1)+lineStart;
    plot(x,y)
    hold all
    area(x(lineStart:lineEnd),y(lineStart:lineEnd),...
         level,'EdgeColor', 'none', 'FaceColor', [.7 .7 .7],'ShowBaseLine','off')
    line([x(lineStart),x(lineEnd)],[level level ])
    hold off
    

    without defining areas of interest a-priory: Filling area

    And don't forget to hold off...

    To calaulate the area: A = trapz(x(lineStart:lineEnd),y(lineStart:lineEnd))