MATLAB在每日轴上绘制月度数据

时间:2013-07-09 16:12:11

标签: matlab plot

我有一个在x轴上有528个点的图。 x轴由mmm yyyy标记。我想在其上绘制数据,但数据是按月形式的。我想获取每个月度数据点,并在月初作为点绘制它。

% Axis and plot
t = 731:1258; % 20120101 to 20130611
y = reshape(dataPoint_Anom1x1(:,:,731:end),[],1); % Size 528x1
x = datenum(2009, 12, 31) + t; % Convert t into serial numbers

plot(x, y); % Plot data

hold on

以下部分是我遇到的问题。 dataPoint_Clim1x1的大小为12x1。 (1,1)对应1月,(2,1)对应2月等。我需要在2012年1月至2013年6月的每个月初绘制相应月份的气候学点作为点。

%%%% Plot climatology on the same graph
dataClim_1x1 = dataClim(u,v,:); % Array that only contains points 1 degree away from 72.5E and 67.25S
B = mean(dataClim_1x1);  % Average along the column
dataPoint_Clim1x1 = mean(B,2); % Average along the row

x_dataClim = ???
y_dataClim = reshape(dataPoint_Clim1x1, [],1); % Change dataPoint_Clim1x1 into a 1 column matrix 


plot(x_dataClim,y_dataClim) % y_dataClim is only 12x1. 

所以上面的情节命令是错误的。我是否只需要以某种方式设置x轴,以便每个月以某种方式绘制datenum?我不想使用辅助轴。

2 个答案:

答案 0 :(得分:1)

我认为您只需要用

定义点的x坐标
x_dataClim = datenum(2011, 1:12, 1);

这会产生“本月的第一天”:

>> datestr(x_dataClim)

ans = 

01-Jan-2011
01-Feb-2011
01-Mar-2011
01-Apr-2011
01-May-2011
01-Jun-2011
01-Jul-2011
01-Aug-2011
01-Sep-2011
01-Oct-2011
01-Nov-2011
01-Dec-2011

很酷的是,你实际上可以“进入明年” - 所以

>> datestr(datenum(2011, 11:14, 1)) 

ans =

01-Nov-2011
01-Dec-2011
01-Jan-2012
01-Feb-2012

答案 1 :(得分:0)

这是我最终做的事情:

x = datenum(2011,1:30,1); % 30 months of data (2 and 1/2 years)
y_dataClim = reshape(dataPoint_Clim1x1, [],1); % Change dataPoint_Clim1x1 into a 1 column matrix 
y = cat(1, y_dataClim, y_dataClim, y_dataClim(1:6,:));
scatter(x,y, 50,'fill'); % Plot scatter plot