Properly put date labels with OuterPosition and datetick

1 view (last 30 days)
I'm trying to change labels on x axis to be from 24/2/2020 to today (actually, at least 1 day after today, otherwise the curve will touch the y axis on the right). I have to use subplot since I have other plots, and I have to use OuterPosition (or similar?) since the figure contains also annotations.
The following code
subplot(3,2,1)
past = datenum('02-24-2020');
present = datenum(datetime('today')+1); % +1 so that curve won't touch y axis on right
plot(linspace(past,present,65), 1:65)
set(gca, 'OuterPosition',[.1 .1 .4 .3], 'XLim',[past present])
datetick('x','dd/mm','keepticks')
produces this
which is not correct, since it cuts data on both on left and on right. The result doesn't change by removing the subplot command.
Even if I remove the OuterPosition option from set, the result doesn't change.
If i remove both subplot and OuterPosition, the result improves a bit, but it is still wrong
How to properly set the x labels?
This is my matlab version

Accepted Answer

Mehmed Saad
Mehmed Saad on 29 Apr 2020
Edited: Mehmed Saad on 29 Apr 2020
You can define xtick and xticklabel by yourself
subplot(3,2,1)
past = datenum('02-24-2020');
present = datenum(datetime('today')+1); % +1 so that curve won't touch y axis on right
plot(linspace(past,present,65), 1:65)
Suppose i want 5 ticks between past and present
tick_pos = linspace(past,present,5);
Set xtick property equal to tick_pos. and for xticklabels convert tick_pos to datestr and then to cell.
set(gca, 'OuterPosition',[.1 .1 .4 .3],'XLim',[past present],...
'XTick',tick_pos,'XTickLabel',cellstr(datestr(tick_pos,'dd/mm')))
  1 Comment
giannit
giannit on 29 Apr 2020
Edited: giannit on 29 Apr 2020
Thank you very much! The curve still touches the y axis though, to correct it we have to use 'today' in the linspace for the plot, and keep 'today+1' elsewhere, right?
Moreover, is it possible to place 'today' as last label, while keeping the curve far from the y axis, i.e. while keeping XLim(2) = 'today+1' ?
EDIT: got it!
subplot(3,2,1)
past = datenum('02-24-2020');
pres0 = datenum(datetime('today'));
pres1 = datenum(datetime('today')+1);
plot(linspace(past,pres0,65), 1:65)
tick_pos = linspace(past,pres0,5);
set(gca, 'OuterPosition',[.1 .1 .4 .3],'XLim',[past pres1],...
'XTick',tick_pos,'XTickLabel',cellstr(datestr(tick_pos,'dd/mm')))

Sign in to comment.

More Answers (0)

Tags

Community Treasure Hunt

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

Start Hunting!