问题
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:-
回答1:
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:
And don't forget to hold off
...
To calaulate the area:
A = trapz(x(lineStart:lineEnd),y(lineStart:lineEnd))
回答2:
You can limit the range of your x axis in the area
plot to the range of interest, e.g. from 0 to 4 and then calculate the resulting values of the function in this range. For the base line: you can hide it in the area
command and add it manually using the line
command.
x = 0:.01:4*pi; %// x data
y = sin(x); %// y data
level = 0.5; %// level
plot(x, y)
hold on
x_interest = 0:.01:4;
y_interest = sin(x_interest);
area(x_interest, max(y_interest, level), level, ...
'EdgeColor', 'none', 'FaceColor', [.7 .7 .7], ...
'ShowBaseLine', 'off');
line( [ min(x_interest) max(x_interest) ], [ level level ] )
来源:https://stackoverflow.com/questions/38420623/shade-and-calculate-specific-area