convert hours to days on y-axis

5 vues (au cours des 30 derniers jours)
AA
AA le 23 Juin 2021
Commenté : AA le 23 Juin 2021
Dear all,
I have a file a1, contains two columns, first one is number of segments (each segments represents 12 hours) for one years and seconds columns has data for that segment. I plot the data w.r.t hours.
Is it possible to convert scale from hours to day numbers or date?
here is the example of 6 day data, date started from 10 Oct 2018.
1 0
2 0
3 0
4 0.199999999999996
5 0
6 0
7 0
8 0.199999999999996
9 0
10 0
11 0
12 0
What i want to plot axis w.r.t date, here is the example
10/10/2018 0
0
11/10/2018 0
0.199999999999996
12/10/2018 0
0
Thanks in advance

Réponse acceptée

Chunru
Chunru le 23 Juin 2021
x = [
1 0
2 0
3 0
4 0.199999999999996
5 0
6 0
7 0
8 0.199999999999996
9 0
10 0
11 0
12 0];
bar(datetime('10/10/2018', 'InputFormat', 'dd/MM/yyyy') + hours(x(:,1)*12), x(:,2));
xtickformat('dd/MM/yyyy')
  8 commentaires
AA
AA le 23 Juin 2021
Modifié(e) : AA le 23 Juin 2021
thank you very much, it works.
AA
AA le 23 Juin 2021
I found a problem with y-axis. if possible, please leave a comment
If i do not change the interval , it gives me so many values but later i changed the interval then it started from 1 JAN.
YTickStr:
10/10/18
10/10/18
10/10/18
11/10/18
11/10/18
11/10/18
11/10/18
12/10/18
12/10/18
12/10/18
12/10/18
13/10/18
13/10/18
Total segmetns lengths are : 1:1524
imagesc(time,day,z2);
colormap(jet)
YTickStr = char(datetime('10/10/2018', 'InputFormat', 'dd/MM/yy', 'Format', 'dd/MM/yy') + hours(day*6));
set(gca, 'YTick', 1:500:lengday, 'YTickLabel', YTickStr);
xlim([-100 100]);
here is output example for these format (without interval, 1:lengday)
with interval (1:500:lengday), it starts from 1 jan

Connectez-vous pour commenter.

Plus de réponses (2)

KSSV
KSSV le 23 Juin 2021
A = [1 0
2 0
3 0
4 0.199999999999996
5 0
6 0
7 0
8 0.199999999999996
9 0
10 0
11 0
12 0];
t0 = datetime('10/10/2018') ;
[r,c] = size(A);
N = size(A,1)/2 ; % number of hours in a day
B = permute(reshape(A',[c,r/N,N]),[2,1,3]);
tn = t0+days(N) ;
t = (t0:tn)' ;
Each matrix in B corresponds to respective day in t.

Cris LaPierre
Cris LaPierre le 23 Juin 2021
If you convert your data to datetime, then you can set the y axis format to be any valid date format.
data = [1 0
2 0
3 0
4 0.199999999999996
5 0
6 0
7 0
8 0.199999999999996
9 0
10 0
11 0
12 0];
dataTT = array2timetable(data(:,2),'RowTimes',datetime(2018,10,10) + 12*hours(data(:,1)-1))
dataTT = 12×1 timetable
Time Var1 ____________________ ____ 10-Oct-2018 00:00:00 0 10-Oct-2018 12:00:00 0 11-Oct-2018 00:00:00 0 11-Oct-2018 12:00:00 0.2 12-Oct-2018 00:00:00 0 12-Oct-2018 12:00:00 0 13-Oct-2018 00:00:00 0 13-Oct-2018 12:00:00 0.2 14-Oct-2018 00:00:00 0 14-Oct-2018 12:00:00 0 15-Oct-2018 00:00:00 0 15-Oct-2018 12:00:00 0
plot(dataTT.Var1,dataTT.Time)
ytickformat('MM/dd/yyyy')

Catégories

En savoir plus sur Data Type Conversion dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by