Area under the curve ignoring axis values (Absolute area)

3 vues (au cours des 30 derniers jours)
Ganesh Naik
Ganesh Naik le 24 Juil 2021
Commenté : Ganesh Naik le 25 Juil 2021
Hi all, I am computing area under the curve using "Trapz" function where it takes x and y co-ordinates into consideration. For example, if you consider the attached figure, I am getting the value of shaded area as 296 where it takes into x and y axis values. But I would like to compute only the absolute area ignoring x and y axis values. In this example y axis height is around 7 (-84 to -91) and x axis distance is around 0.1 hence the absolute area would be very small. Any help in this would be highly appreciated.

Réponse acceptée

Scott MacKenzie
Scott MacKenzie le 24 Juil 2021
Modifié(e) : Scott MacKenzie le 24 Juil 2021
The trapz function uses integration so the result is the area under the curve. That's not what you want. I suggest you first create a polygon of points encompassing the area of interest. Then use the area function to get the area. Here's and example using some test data similar to your data.
% test data
x = -0.8:0.1:1;
y = [-75 -76 -77 -78 -78 -79 -80 -81 -86 -87 -88.3 -92 -91 ...
-88 -86 -85 -84 -84 -83];
% x range for area of interest
x1 = 0;
x2 = 0.6;
% find x indices for range of interest
idx1 = find(x >= x1, 1);
idx2 = find(x >= x2, 1);
% create polyshape for area of interest
x1 = x(idx1:idx2);
y1 = y(idx1:idx2);
ps = polyshape(x1, y1);
% compute and output area
a3 = polyarea(x1,y1);
fprintf('Area: %f\n', a3);
Area: 1.630000
% plot it
plot(x,y);
set(gca,'ylim', [-95 -70]);
hold on;
plot(ps);
  4 commentaires
Ganesh Naik
Ganesh Naik le 24 Juil 2021
Modifié(e) : Ganesh Naik le 24 Juil 2021
Hi Scott I have managed to get the precise points using modified "ginput" function. Everytime, I select (click) two points and generate (x1,y1) and (x2,y2) points. The figure above is the result of using modified ginput. After that I compute the area and shade them. I think I can modifiy your solution to achieve the result. I will try it and let you know. Any opinion or suggestion from your end is highly appreciated.
Scott MacKenzie
Scott MacKenzie le 24 Juil 2021
I just posted an new answer that uses ginput.

Connectez-vous pour commenter.

Plus de réponses (1)

Scott MacKenzie
Scott MacKenzie le 24 Juil 2021
Modifié(e) : Scott MacKenzie le 24 Juil 2021
@Ganesh Naik Here's a new answer that uses ginput to "select" data points along the line for definiing the area of interest. You'll need to run this yourself to get a feel for the interaction with a mouse. Select two points along the data line and the area will be computed, sent to the command window, and plotted.
% test data (similar pattern to data in question)
xx = -0.8:0.1:1;
yy = [-75 -76 -77 -78 -78 -79 -80 -81 -86 -87 -88.3 -92 -91 ...
-88 -86 -85 -84 -84 -83];
% interpolate to get more points and better "closest" point to mouse click
x = linspace(min(xx), max(xx), 250);
y = interp1(xx, yy, x);
% plot data and set axes
plot(x,y);
hold on;
axis([-1, 1.2, -95, -70]);
% get two mouse button clicks
[gx, gy] = ginput(2);
% get indices of "closest" data points along x-axis
idx1 = find(x >= gx(1), 1);
idx2 = find(x >= gx(2), 1);
% create polyshape for area of interest
x1 = x(idx1:idx2);
y1 = y(idx1:idx2);
ps = polyshape(x1, y1);
% compute, output, and plot area
a = polyarea(x1,y1);
fprintf('Area: %f\n', a);
plot(ps);
  1 commentaire
Ganesh Naik
Ganesh Naik le 25 Juil 2021
Hi Scott, thanks for your help with the ginput part. Although I am using modifed ginput function but interpolating part that you mentioned would help me to select the precise points. Thanks again for your help, much appreciated. I am going to accept this answer.

Connectez-vous pour commenter.

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by