MATLAB Answers

plot two time series datasets from different years on the same plot ignoring the year

1 view (last 30 days)
Ihab Abboud
Ihab Abboud on 30 Oct 2020
Commented: Ameer Hamza on 31 Oct 2020 at 16:12
I want to plot two time series datasets from 2019 and 2020 on the same plot to compare them but I want to ignore the year so they are on top of each other. for this I changed the years to 2000 and plot it both but then the xaxis label is 2000. Also this works ok if no leap years but not a good idea if one of the years is a leap year. I also tried converting the datetime to 'day of year' but then the xaxis is a number and I want to show dates.
is there a way to do this without changing the year?

  1 Comment

Ihab Abboud
Ihab Abboud on 30 Oct 2020
in desperation I dragged the legend to the bottom to cover the year but I don't like workarounds if there is a proper way to do it

Sign in to comment.

Answers (1)

Ameer Hamza
Ameer Hamza on 30 Oct 2020
Edited: Ameer Hamza on 30 Oct 2020
You can run the following lines after creating the figure
ax = gca;
ax.XTickLabelMode = 'manual';
ax.XTickLabel = datestr(ax.XTick,'mmmm dd');

  5 Comments

Show 2 older comments
Ihab Abboud
Ihab Abboud on 30 Oct 2020
I get it. It is a general problem but if a year has Feb 29 and you take the data and change the year to a non leap year that might create an issue. I just was hopping there is a way of doing this without making both years the same year then plotting. It works with day number (or day of year) but then I don't like the axis labels. I guess I can always change the label on the axis to whatever I want but I like automations
Ameer Hamza
Ameer Hamza on 31 Oct 2020 at 16:12
You can do something like this so that you don't need to change the year number
t1 = datetime(2019,1,1):datetime(2019,12,31);
y1 = rand(size(t1));
t2 = datetime(2020,1,1):datetime(2020,12,31);
y2 = rand(size(t2));
ax1 = axes();
hold(ax1);
plot(t1, y1);
ax1.XTickLabelMode = 'manual';
ax1.XTickLabel = datestr(ax1.XTick,'mmm dd');
ax2 = axes('Position', ax1.Position, 'Visible', 'off');
hold(ax2);
plot(t2, y2, 'r')
However, note that in this case, the difference will be offset by 1 day. A reasonable approach seems to remove the extra day.

Sign in to comment.

Products


Release

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by