3

2008年1月から2011年1月までの月間隔で時系列をマークしたい。

編集:時系列にはすでにdatenum形式の時間コンポーネントがあります:

733408 x1
733410 x2
etc...

私の最初の質問の声明でこれを明確にしなかったことをお詫びします。

年に2回の簡単な実装は、非常に面倒になります。

years = [2008 2008 2009 2009 2010 2010 2011];
months = [1 7 1 7 1 7 1];
days = ones(1,7);
for k = 1:7
    dates(k) = datenum(years(k), months(k), days(k));
end
labels = datestr(dates,'mmm-yy');
set(gca,'XTick',dates);
set(gca,'XTickLabel',labels);

これを月次ティックに拡張するには:

years = [2008 ...repeat10times 2009 ...repeat10times 2010 ...repeat10times 2011]
m = 1:11; months = repmat(m,1,3)
days = ones(1:34)

もっと簡単な方法があるはずです!

4

2 に答える 2

5

知ってるdatetick?あなたの例のために:

% date (x-data)
years = [2008 2008 2009 2009 2010 2010 2011];
months = [1 7 1 7 1 7 1];

% do plot (NOTE: datenum is vectorized!)
plot( datenum(years, months,1),  [your y-data] )

% set axis labels
datetick('x','mm-yyyy')

または、もう少し一般的に、

% generate periodic data
[years, months] = meshgrid(2008:2011, 1:12); % or whatever range you want

% do plot and set axes
plot( datenum(years(:), months(:), 1),  [your y-data] )
datetick('x','mm-yyyy')
于 2012-11-19T10:14:51.100 に答える
2

シリアル日付番号を日付に変換する前に、軸の目盛りを設定する必要があります。

例として、いくつかの乱数と日付をプロットしました。

date1 = datenum([2012 01 01 00 00 00]);
date2 = now;
dateV = date1:date2; % x-axis data
y = rand(length(dateV),1); % y-axis data
hl = plot(dateV,y);
hax = get(hl, 'Parent'); % axes handle

このように軸のXTickプロパティを設定することにより、dateVの30番目の要素ごとに目盛りが配置されます。ティック間隔に合わせてこれを変更できます。

set(hax, 'XTick', [dateV(1:30:end)]); 
datetick('x', 24, 'keepticks'); 24 is a date format identifier. You can select a format from the datetick documentation.

日付目盛りのドキュメントで指摘されているように、日付目盛り機能を実行する前に、軸目盛りを設定する必要があります。

于 2012-11-21T09:09:28.203 に答える