convert hours to days on y-axis

2 Ansichten (letzte 30 Tage)
AA
AA am 23 Jun. 2021
Kommentiert: AA am 23 Jun. 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

Akzeptierte Antwort

Chunru
Chunru am 23 Jun. 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 Kommentare
AA
AA am 23 Jun. 2021
Bearbeitet: AA am 23 Jun. 2021
thank you very much, it works.
AA
AA am 23 Jun. 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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

KSSV
KSSV am 23 Jun. 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 am 23 Jun. 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')

Kategorien

Mehr zu Data Type Conversion finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by