xlim function error. i have seen on video, the codes were working but with me it is not working

5 views (last 30 days)
**My codes are below. I get that error: "Error using xlim (line 31) Limits must be a 2-element vector of increasing numeric values."
Also xtickformat function gives me eror. Can you help me? Thanks**
clc; clear; close all;
dates=datetime(2025,8,17)+calmonths(2:11)+calweeks(0:9)
xlim(datetime([2025 2026],[11 5],[12 23]))
xtickformat('dd-MMM-yyyy')

Accepted Answer

dpb
dpb on 29 Jun 2021
You're trying to set axis limits on a numeric axes with datetime values -- no can do...
dates=datetime(2025,8,17)+calmonths(2:11)+calweeks(0:9); % create your date vector
figure % make new figure so is clean
xlim(datetime([2025 2026],[11 5],[12 23])) % try your operation
xtickformat('dd-MMM-yyyy')
Error using xlim (line 31)
Limits must be a 2-element vector of increasing numeric values.
>>
And, as you saw, boom! Because the default axes created is numeric -- and xlim isn't strong enough to change them to a DatetimeRuler object on its own.
>> plot(dates,randn(size(dates))) % plot a datetime object first
>> xlim(datetime([2025 2026],[11 5],[12 23])) % now you can set the limits as wanted
>>
MORAL: Always make sure you've got the right type of axes object first -- with datetime, need to have put some data on the axes first with plot() or other higher-level function to create the proper type.
  6 Comments
Yusuf Suer Erdem
Yusuf Suer Erdem on 2 Jul 2021
Check my codes please, they are working pretty fine.
history=datetime(2019,08,1)+caldays(0:10);
y=randi([11,21],1,11);
stem(history,y,'filled');
tarihBaslangic=datetime(2019,08,1);
tarihBitis=datetime(2019,08,8);
xlim([tarihBaslangic tarihBitis])

Sign in to comment.

More Answers (1)

Steven Lord
Steven Lord on 29 Jun 2021
I would expect to see that error if you'd plotted with non-datetime data as your X data. If for example you'd plotted these points:
x = 1:10;
y = x.^2;
plot(x, y)
How much of that plot would you expect to see if I set the X limits from last Thursday to next Saturday?
T = datetime('today');
lastThursday = dateshift(T, 'dayofweek', 'Thursday', 'previous')
lastThursday = datetime
24-Jun-2021
nextSaturday = dateshift(T, 'dayofweek', 'Saturday', 'next')
nextSaturday = datetime
03-Jul-2021
plot(x, y)
xlim([lastThursday, nextSaturday]);
Error using xlim (line 31)
Limits must be a 2-element vector of increasing numeric values.
You haven't specified what error message you received when you tried calling xtickformat but I'm guessing the root cause is the same: you can't change numbers on the X axis into dates and times.

Categories

Find more on Specifying Target for Graphics Output 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!