how mark the highest maximums of a graph?

hello, I try to mark the highest maximums of a graph that I make using data from an excel. but I can't.
the code i use is this:
% Representación Gráfica
plot(t_al,m_al)
xlabel("tiempo"), ylabel("nivel")
datetick('x',10)
grid on
%findpeaks(select,Fs,'MinPeakDistance',0.005)
I get an error with the select function and I don't know what to do

 Accepted Answer

Let's plot some sample data.
x = 0:360;
y = sind(x).*(x-60).*(x-180).*(x-210)/(360.^2);
plot(x, y)
hold on
Identify the local maxima and plot a second "line" highlighting them with circles.
L = islocalmax(y);
plot(x(L), y(L), 'o')

2 Comments

thanks, but what I need would be for the program to mark the maximums that are greater than a certain "y" or maximums that are at a distance 'x' between them.
would you know how to do the second?
You're latest request becomes a very messy task. For that I would definitely write a function. Because now you have to handle selection of maxima in a "not at all obvious manner" what about high peaks that are way above the threshold but a bit close in x, how to handle a slightly lower peak that is just outside the x-separation to the highest peak but within that x-separation to a sub-peak close to the highest one, should that third peak be included or excluded. This is too much hassle to just toss something together on a whim without rather careful and precise specifications.

Sign in to comment.

More Answers (1)

You might get something from a simple solution like this (if your curve is not too noisy):
[m_al_max,idx_max] = max(m_al);
hold on
plot(t_al(idx_max),m_al_max,'rx')
HTH

4 Comments

thanks, this one works. One more question, if I wanted to mark, for example, the maximums that are above a certain value. how would it be?
That is another can of worms entirely - then you're back to the more general solutions provided by the different versions of findpeaks - since you most likely want peaks, but not noisy local maxima. You could possibly get something with:
m_al_threshold = 3.14;
idxM = find((diff(m_al(1:end-1))>0) & ...
(diff(m_al(2:end))<0) & ...
m_al(2:end-1)>m_al_threshold) + 1;
plot(t_al(idxM),m_al(idxM),'co')
But this version gladly picks out all noise-peaks and ignore peaks where m_al have a couple of consecutive identical values. (a proper QD-solution - might get the job done, might make your hands dirty.)

Sign in to comment.

Products

Release

R2021b

Community Treasure Hunt

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

Start Hunting!