MATLAB Answers

0

How to manually change plot x-axis to months

Asked by hesham fageeh on 13 Aug 2018 at 6:40
Latest activity Commented on by hesham fageeh on 13 Aug 2018 at 7:36

I have been trying to manually change the xtick label to show months instead of the array that i'm plotting, however it only shows a portion of the string and I can't get to show the months from Jan-Dec.

month = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
h(6) = figure;
plot(Day1Sum)
hold on 
plot (Day2Sum,'r')
% xlim ([1 hrsyr])
legend ('Load', 'Load with DR')
ylabel ('Load (MWh)') 
xticklabels(month)

  3 Comments

what is size of your Day1Sum ?

(1,8760) , it's the number of hrs in one year.

xlim([1 12])
xticks(1:12);
xticklabels(month)

Because you have 12 labels, you need 12 xticks, which probably would not have happened automatically.

Sign in to comment.

1 Answer

Answer by jonas
on 13 Aug 2018 at 7:01
 Accepted Answer

You need to pass a cell array to xticklabels instead of a string. You build a cell array with {} instead of []. For example

month = {"Jan","Feb","Mar",...}

Second, it is better to work with datetime format, as manipulating your ticklabels makes for buggy code. Will gladly show you how, if you provide your x-data.

  3 Comments

I tried passing a cell array it still shows the same problem. Sure, please find the x-data attached.

Here's one way to do it with datetime.

data=load('Day1Sum.mat')
Day1Sum=data.Day1Sum;
t=datetime(0,1,1,1:8760,0,0)
plot(t,Day1Sum)
set(gca,'xtick',linspace(t(1),t(end),12))
xtickformat('MMM')

...and here is with the other approach

data=load('Day1Sum.mat')
Day1Sum=data.Day1Sum;
t=1:8760;
plot(Day1Sum)
set(gca,'xtick',linspace(t(1),t(end),12))
month = {'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'};
xticklabels(month)

The number of ticklabels must be equal to the number of ticks

Both work great. Thanks!

Sign in to comment.