convert hours to days on y-axis

3 次查看(过去 30 天)
AA
AA 2021-6-23
评论: AA 2021-6-23
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

采纳的回答

Chunru
Chunru 2021-6-23
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 个评论
AA
AA 2021-6-23
编辑:AA 2021-6-23
thank you very much, it works.
AA
AA 2021-6-23
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

请先登录,再进行评论。

更多回答(2 个)

KSSV
KSSV 2021-6-23
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 2021-6-23
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')

类别

Help CenterFile Exchange 中查找有关 Dates and Time 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by