How to plot 2 years of timetable data on top of each other with the 1 year on the x-axis?

17 views (last 30 days)
Hi, i am trying to plot 2 years of timetable data with hourly soil moisture values from 2016 and 2017. I want to be able to plot them on top of each other to compare their trends. For ease, i have already removed the leap day in 2016 so both years have the same number of data points. I have managed to obtain a plot like this, however, the dates on the x-axis specifically relates to the 2016 data set (this of course is the right scale but i want to be able to have a generalised year scale on the x-axis instead). I would prefer the scale to be in the format of months and days i.e dd/mm. Any help would be greatly appreciated. My current code and figure is as follows:
% find start and end rows - HOURLY
start_2016 = find(year(TT.DT)==2016 & month(TT.DT)==1 & day(TT.DT)==1 & hour(TT.DT)==0);
end_2016 = find(year(TT.DT)==2016 & month(TT.DT)==12 & day(TT.DT)==31 & hour(TT.DT)==23);
start_2017 = find(year(TT.DT)==2017 & month(TT.DT)==1 & day(TT.DT)==1 & hour(TT.DT)==0);
end_2017 = find(year(TT.DT)==2017 & month(TT.DT)==12 & day(TT.DT)==31 & hour(TT.DT)==23);
% obtain data for each year (2016 and 2017) - HOURLY
y_2016 = TT.DT(start_2016: end_2016);
y_2017 = TT.DT(start_2017: end_2017);
y_2016_sm = TT.SM(start_2016: end_2016);
y_2017_sm = TT.SM(start_2017: end_2017);
% plot graphs
figure(1)
subplot(2,1,1)
title('Hourly')
plot(y_2016,y_2016_sm)
hold on
plot(y_2016,y_2017_sm)
ylabel('Volumetric Soil Moisture')
grid on
grid minor
legend('2016','2017')
subplot(2,1,2)
title('Hourly')
plot(y_2016_sm,'.')
hold on
plot(y_2017_sm,'.')
ylabel('Volumetric Soil Moisture')
grid on
grid minor
legend('2016','2017')

Answers (1)

Adam Danz
Adam Danz on 11 Feb 2022
One simple approach would be to change the year for all of the data to equal 2016 or any other leap year (see leapyear function). The plot the data using datetime values so you don't have to get rid of the leap days. You can specify the datetime format in the x-tick labels by setting TickLabelFormat.
ax.XAxis.TickLabelFormat = 'mmm'; % ax is axis handle
To change the year of datetime values,
dt.Year = 2016; % dt is the datetime vector

Categories

Find more on Dates and Time in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!