Home > front end >  How to plot a graph for specific day of every month for whole Year MATLAB
How to plot a graph for specific day of every month for whole Year MATLAB

Time:10-07

I have two variables called x and y. Each has 24*365 values. 24 presents the number of hours in a day and 365 presents the number of days in a year. I am plotting the values of 12th hour and 25th day by the following command:

plot(x(12:12,25), y(12:12,25))

Now I want to do the same for every 25th day for a whole year. Like 25th of Jan, 25th of Feb, 25th of March. I am not bothered about values of hours but I don't know how to create its logic as every month has different number of days.

CodePudding user response:

The datetime data type is awesome for this type of work.

%Make a vector of datetimes
ts = (  datetime(2001,1,1,0,0,0):hours(1):datetime(2001,12,31,023,0,0)  )';

%Find the datetimes which are on the 25th day of the month, and the 12th
%hour of the day
mask =  (day(ts) == 25)  &  (hour(ts) == 12)  ;

%Confirm
ts(mask)

The result is below.

(You likely want to use the mask variable itself for your task. Sometimes you want to use find on the logical statement to get a list of indexes instead.)

ans = 
  12×1 datetime array
   25-Jan-2001 12:00:00
   25-Feb-2001 12:00:00
   25-Mar-2001 12:00:00
   25-Apr-2001 12:00:00
   25-May-2001 12:00:00
   25-Jun-2001 12:00:00
   25-Jul-2001 12:00:00
   25-Aug-2001 12:00:00
   25-Sep-2001 12:00:00
   25-Oct-2001 12:00:00
   25-Nov-2001 12:00:00
   25-Dec-2001 12:00:00

CodePudding user response:

You can generate the day of year number by getting the datenum values for the 25th of each month and subtracting the datenum of the 1st Jan that year.

dayIdx = datenum(2022,1:12,25) - datenum(2022,1,1)   1;

Then just use this as your column index

plot(x(12,dayIdx), y(12,dayIdx))

The choice of 2022 above is arbitrary, as long as you pick a non-leapyear to get the 365-day year correct.

  • Related