How do I add local min and max values on each line of the plot like the plot shown below?

1 view (last 30 days)
Bryan Tassin
Bryan Tassin on 28 Aug 2021
Commented: TADA on 5 Sep 2021
%Code used for first plot
% Need the first plot to look exactly like the second plot
plot(rad1,'red')
hold on
plot(in,'yellow')
plot(in1,'blue')
plot(in2,'green')
title('Position Analysis')
xlabel('\Theta2(rads)')
ylabel('Outputs')
legend({'\Theta3(radians)','R3(in)','R4(in)','R5(in)'},'FontSize',6)
xticks([0 50 100 150 200 250 300 350 400])
xticklabels({'0','\pi/4','\pi/2','3\pi/4','\pi','5\pi/4','3\pi/2','7\pi/4','2\pi'})

Accepted Answer

Image Analyst
Image Analyst on 5 Sep 2021
If you just have one global peak and valley, try this:
maxValue = max(in);
indexesOfMaxima = find(in == maxValue);
plot(indexesOfMaxima, in(indexesOfMaxima), 'rx', 'LineWidth', 2, 'MarkerSize', 15);
% Repeat for in1 and in2 using their colors.
If you have local mins and maxima, use findpeaks() in the Signal Processing Toolbox
[peakValues, peakIndexes] = findpeaks(in);
[valleyValues, valleyIndexes] = findpeaks(-in); % Turn it upside down then find peaks.
valleyValues = -valleyValues;

More Answers (1)

TADA
TADA on 28 Aug 2021
Im not sure, but it seems to me that the plot you are trying to duplicate marks local minima/maxima points as the absolute minimum/maximum values in each dataset, and not using some more complecated peak analysis.
In that case you can easilly find the deeps and peaks using
x = 1:100;
rad1 = sin(x).^2 .* tan(x);
[localMinValueRad1, localMinIdxRad1] = min(rad1);
[localMaxValueRad1, localMaxIdxRad1] = max(rad1);
plot(rad1, 'red');
hold on;
plot([localMinIdxRad1(:); localMaxIdxRad1(:)], [localMinValueRad1(:); localMaxValueRad1(:)], 'rx');
% continue doing this for the rest of the datasets
  4 Comments

Sign in to comment.

Tags

Community Treasure Hunt

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

Start Hunting!