6

私はこのようなデータを持っています:

22.10.1980. 100  
25.10.1980. 120  
26.10.1980.  12

(それのはるかに多く、そして各日付について、右側のいくつかの独立した測定値)。

さて、これはおそらく些細なことですが、MATLABでこれほどのことをしたことはなく、オンラインで同様の例を見つけるのに問題があります。時間/表示日付軸(x軸)にデータをプロットする必要があります。すべての日付が内部にあります(つまり、23。と24.も...測定値がありません)。

プロット軸に表示される日付を取得するにはどうすればよいですか?

4

5 に答える 5

16

を使用するのが最善のようdatetickです。

使用法:datetick('x')またはドキュメントdatetick('x', dateformat)で説明されている利用可能な形式を使用します。

于 2010-01-10T20:09:40.400 に答える
4

データファイルが上記の形式であると仮定すると、データのtextscan読み取りに使用できます。

fid = fopen('data.txt','rt');
C = textscan(fid,'%s %s %s %d','Delimiter','.','CollectOutput',1);
fclose(fid);

の最初のセルにCは文字列(日付の一部)のN行3列のセル配列Cが含まれ、の2番目のセルにはデータ測定値のN行1列のベクトルが含まれます。datenum最初に3つの小さい文字列を1つの日付文字列に連結してから、次の関数を使用して、測定ごとに日付番号を作成できます。

t = datenum(strcat(C{1}(:,3),'-',C{1}(:,2),'-',C{1}(:,1)));
data = C{2};

t測定値のベクトルと一致する日付番号のベクトルがdataできたら、それらをプロットできます。

plot(t,data,'*');  %# Plot the points as asterisks

これで、x軸のラベルを変更して、実際の日付を表示できます。1つのオプションは、関数を使用することです。これは、 stevenの回答datetickに示されている簡単でエレガントなソリューションです。もう1つのオプションは、関数を使用して自分でラベルを作成し、現在の軸のプロパティとプロパティを変更することです。datestrXTickXTickLabel

xpts = min(t):max(t);  %# Make a full vector, filling in missing dates
set(gca,'XTick',xpts,'XTickLabel',datestr(xpts));  %# Set axes properties

注: x軸ラベルを日付文字列に変更するためにどのオプションを選択した場合でも、目盛りが近すぎると、ラベルが互いに重なり合うという問題が発生する可能性があります。これを修正するには、x軸に沿って目盛りを減らすか再配置するか(XTickプロパティを変更する)、またはaxesFontSizeプロパティを調整します。ラベルを回転させてフィットさせる場合は、ラベルを消去して、新しい回転テキストオブジェクトを作成する必要があります。MathWorks File Exchangeに関する次の提出は、まさにそれを行います。

于 2010-01-10T20:14:00.340 に答える
3

datenumを使用すると、任意の文字列日付を日付形式の記号に基づいた数値形式に変換できます(ヘルプdatestrを参照)。

たとえば、これはすべて同じ数値の日付表現につながります。

datenum('15/05/2009 21:22','dd/mm/yyyy HH:MM');
datenum('15.05.2009 21:22','dd.mm.yyyy HH:MM');
datenum('21-22 15.05.2009','HH-MM dd.mm.yyyy');
datenum('21-22 05/15.2009','HH-MM mm/dd.yyyy');
...

良い点は、セル配列(textscanからの出力)またはchar配列をdatenumに直接渡すことができ、数値の日付配列を出力することです。

于 2010-01-12T13:19:10.023 に答える
2

Datetickは良いオプションであり、datetick2もここにあります:MATLAB Central

Datetick2では、ズームインした距離に応じてタイムラベルを調整しながら、パンとズームを行うことができます。

dd.mm.yyyyの形式についてはよくわかりません。必要に応じて、正規表現またはstrrepを使用して小数点をダッシュ​​に変更できます。

于 2010-01-11T03:51:17.110 に答える
1

datenumを使用して日付を数値に変換し、通常どおりデータをプロットできます。xという変数に日付ベクトルを入れたとしましょう。今、あなたは使用することができます

set(gca, 'xtick',x(1:10:end));
set(gca, 'xticklabel',datestr(x(1:10:end));

x軸に目盛りを設定します。

于 2010-01-10T20:12:13.250 に答える