Adding a horizontal line to a plot
30 views (last 30 days)
Show older comments
How do you use the line function to add a horizontal line to a plot?
For example,
To add a horizontal line to easily point out the maximum value.
I am trying to use it in a nested for loop. This is my code so far:
y =[99;1;0];
beta = [0.005, 0.05, 0.1];
nu = [0.05, 0.075, 0.1];
options=odeset();
for i = 1:length(beta)
for index = 1:length(nu)
[T,Y] = ode45(@sir_ode,[0 30], y,options,beta(i),nu(index));
figure
plot(T,Y)
xlabel('Time(days)')
ylabel('Population(%)')
legend('susceptible','infected','recovered')
title_name =sprintf('Beta = %.3f Nu = %.3f', beta(i), nu(index));
title(title_name)
% finds max infected values
infected_values = Y(:,2);
max_infected(i,index) = max(infected_values);
% find max time
index_number(i,index)=find(infected_values ==max(infected_values));
max_T(i,index) = T(index_number(i,index));
line([max_T(i),max_T(i)], ...
[0,max_infected(i)],'Color', [0 1 0])
end
end
Thank you.
0 Comments
Accepted Answer
Star Strider
on 6 Dec 2014
I couldn’t run your code. You can do something like this to plot a horizontal line at the maximum:
x = linspace(0,pi);
y = sin(x);
ymax = max(y);
figure(1)
plot(x, y, '-b')
hold on
plot(xlim, [1 1]*ymax, '-r')
hold off
axis([xlim 0 1.1])
More Answers (1)
Image Analyst
on 6 Dec 2014
Your line is a vertical line because both the x values are the same. To get a horizontal line, from the x=0 (y) axis to the peak, you could do
[maxY, indexAtMaxY] = max(infected_values);
x1 = 0;
x2 = T(indexAtMaxY);
line([x1, x2], [maxY, maxY], 'Color', 'g', 'LineWidth', 2);
1 Comment
Image Analyst
on 6 Dec 2014
Needless to say, all that code about "index_number" is unnecessary so get rid of it.
See Also
Categories
Find more on Annotations in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!