Usman YousafZai
Usman YousafZai

Reputation: 1120

How to plot a graph for specific day of every month for whole Year MATLAB

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.

Upvotes: 1

Views: 144

Answers (2)

Pursuit
Pursuit

Reputation: 12345

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

Upvotes: 1

Wolfie
Wolfie

Reputation: 30047

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.

Upvotes: 1

Related Questions