Area between a curve and a baseline
Afficher commentaires plus anciens
I want to create a base line (red line) from the plot and calculate area between the base line and curve (blue line).Curve is a vector. Baseline is drawn manually using code below. [x y]=ginput(2); line(x,y);
Any help/ suggestions is highly appreciated.
Thanks

Réponse acceptée
Plus de réponses (1)
Teja Muppirala
le 13 Nov 2012
You could try something along the lines of this:
% Just making some data
x0 = 0:0.001:5;
y0 = sin(x0);
plot(x0,y0);
grid on; set(gca,'layer','top');
% Get your two points
[x y]=ginput(2); line(x,y);
% Break up the line segment into a sufficiently fine grid
N = 10001;
x_fine = linspace(x(1),x(2),N);
dx = x_fine(2)-x_fine(1);
% Interpolate the values at the grid points
top = interp1(x0,y0,x_fine); % Top of the area
bottom = interp1(x,y,x_fine); % Bottom of the area
% Get the area using TRAPZ and show it
area = dx*trapz(top-bottom)
patch([x_fine fliplr(x_fine)], [top fliplr(bottom)],'r');
Just replace the sine with whatever data you are using (the example above uses row vectors, so if your data is in a column instead, you'll probably have to make some minor modifications)
1 commentaire
Joe Abraham
le 28 Nov 2012
Catégories
En savoir plus sur Graphics Performance dans Centre d'aide et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!