How can I update the x axis limit inside a loop?

6 views (last 30 days)
% parameters
omav = 5*1000*2*pi; % omega average, center
sigma = [0,0.5,1,2,5].*1000*2*pi; % std deviation. A.K.A width
t = 100;
for i=1:length(sigma)
om = linspace(-3*sigma(i), 3*sigma(i),100);
num = -(om-omav).^2;
den = 2.*sigma(i).^2;
gaus = exp(num./den);
figure(i), plot(om, gaus)
title( [' for sigma = ' num2str(sigma(i)/(2000*pi))] )
set(gca,'xlim',[om(1) om(end)])
end
This is my code, i'm trying to make each figure with new x limits from the value of the variable omm but i get an error says:
" Error using matlab.graphics.axis.Axes/set
While setting the 'XLim' property of 'Axes':
Value must be a 1x2 vector of numeric type in which the second element
is larger than the first and may be Inf "
I thought this because of the zero value of first sigma, therefore i added an if statement that if i>1 , set the x limits, and the error disappeared, but the limits still as they were.

Accepted Answer

Adam Danz
Adam Danz on 27 Jan 2020
On the first iteration, om is all 0s so [om(1) om(end)] returns [0,0] which, as you pointed out, is not allowed when setting axis limits. Here are two ways around that.
Method 1: offset one of the limit values by a very tiny number
set(gca,'xlim',[om(1), om(end)+realmin])
% --or--
set(gca,'xlim',[om(1)-realmin, om(end)])
Method 2: set a default limit when the limits are equal
xl = [om(1), om(end)];
if isequal(xl(1),xl(end))
xl = [0,1];
end
set(gca,'xlim',xl)
  2 Comments
Adam Danz
Adam Danz on 27 Jan 2020
The xlim is working. Look at your data more closely and you'll see that the blue line terminates at the end of the x axis.
What were you expecting to see?
Muhamed Sewidan
Muhamed Sewidan on 27 Jan 2020
I wanted it to show the whole plot, as you can see it is cutted. but, I'veuntitled.png found that this is the last value

Sign in to comment.

More Answers (0)

Products

Community Treasure Hunt

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

Start Hunting!