Filter löschen
Filter löschen

Properly put date labels with OuterPosition and datetick

1 Ansicht (letzte 30 Tage)
giannit
giannit am 29 Apr. 2020
Bearbeitet: giannit am 29 Apr. 2020
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

Akzeptierte Antwort

Mehmed Saad
Mehmed Saad am 29 Apr. 2020
Bearbeitet: Mehmed Saad am 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 Kommentar
giannit
giannit am 29 Apr. 2020
Bearbeitet: giannit am 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')))

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by