Azzera filtri
Azzera filtri

Set specific date ticks

40 visualizzazioni (ultimi 30 giorni)
EM
EM il 13 Ott 2017
Risposto: Med Aymane Ahajjam il 14 Mag 2019
Hi trying to set specific date ticks. I don't understand why the following code does not work
figure()
hold on
box on
plot(date1,series1,'k')
plot(date1,series2,'r--')
xlabel('Date')
ylabel('Price')
DateString = {'06/30/2010';'11/30/2010'};
datenum(DateString);
set(gca, 'XTick', datenum(DateString))
dateFormat = 1;
datetick('x', dateFormat)

Risposta accettata

Walter Roberson
Walter Roberson il 13 Ott 2017
datetick('x', dateFormat, 'keepticks')
  5 Commenti
EM
EM il 21 Ott 2017
Hi I'm still receiving an error. Can you help?
Here is the code:
figure()
hold on
box on
plot(date1,series1,'k')
plot(date1,series2,'r--')
xlabel('Date')
ylabel('Price')
DateString = {'06/30/2010';'11/30/2010'};
datenum(DateString);
set(gca, 'XTick', datenum(DateString))
dateFormat = 1;
datetick('x', dateFormat,'keepticks')
Here is the error:
Error using matlab.graphics.axis.decorator.DatetimeRuler/validateTicks Value must be a vector of increasing datetime values.
Error in matlab.graphics.axis.decorator.DatetimeRuler/setTicksDelegate
Walter Roberson
Walter Roberson il 21 Ott 2017
Your date1 appears to be datetime objects, and you appear to be using R2016b or later. In that case you do not use datetick.
figure()
hold on
box on
plot(date1, series1, 'k')
plot(date1, series2, 'r--')
xlabel('Date')
ylabel('Price')
DateString = {'06/30/2010';'11/30/2010'};
ticlocs = datetime(DateString); %R2014b or later
ticlocs.Format = 'dd-MMM-yyyy';
set(gca, 'XTick', ticklocs); %R2016b or later

Accedi per commentare.

Più risposte (2)

Peter Perkins
Peter Perkins il 13 Ott 2017
Modificato: Walter Roberson il 13 Ott 2017
If you have access to R2016b or later, you will probably be much happier using datetime rather than datenum/datestr, including for plotting:
d = datetime(2015,1,1:500);
x1 = randn(size(d));
plot(d,x1)
ax = gca;
ax.XAxis.TickValues = datetime(2015,1,1)+calquarters(0:6);
ax.XAxis.TickLabelFormat = 'QQQ-yyyy';
  3 Commenti
Walter Roberson
Walter Roberson il 13 Ott 2017
Yup. For example,
ax.XAxis.TickValues = datetime(2015,1,1)+days([18 143 207 258]);
ax.XAxis.TickLabelFormat = 'MMM dd';
or
ax.XAxis.TickValues = datetime(2015,[1;5;11;14], [17;5;30;19]);
ax.XAxis.TickLabelFormat = 'yy/M/d';
EM
EM il 13 Ott 2017
Thank you Walter, that is very helpful.

Accedi per commentare.


Med Aymane Ahajjam
Med Aymane Ahajjam il 14 Mag 2019
In order for the TickLabelFormat to work, at least in my case, I had to specify:
ax.XTickLabelMode = 'manual';
ax.XAxis.TickLabelFormat = 'HH:mm:ss';

Categorie

Scopri di più su Dates and Time in Help Center e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by