日付と時刻のプロット
この例では、datetime
配列および duration
配列として格納されている日付と時刻でライン プロットを作成する方法を説明します。datetime
データ型は 2020 年 8 月 24 日午前 10 時 50 分 30 秒などの時点を表し、duration
データ型は 12 時間、30 分などの時間の長さを表します。ほとんどのプロット関数は datetime
配列と duration
配列を "x" 座標、"y" 座標、および "z" 座標として受け入れ、目盛り値を適切な日付と時間の単位で表示します。datetime
値と duration
値を使用して、独自の軸の範囲と目盛り値を指定できます。目盛り値の形式を変更して、任意の日付と時間の単位を表示することもできます。データ ヒントには、プロット上のカーソル位置の datetime
値と duration
値が表示され、これらの値をワークスペース変数にエクスポートできます。スプレッドシートまたはコンマ区切り値 (CSV) ファイルからデータを読み取ると、日付と時刻のデータをプロットに含めることができます。
日付と時刻のデータのプロット
datetime
配列と duration
配列を数値配列に変換せずにプロットできます。ほとんどのプロット関数は datetime
配列および duration
配列を入力引数として受け入れます。
たとえば、"x" 軸に datetime
値、"y" 軸に数値をもつデータ セットをプロットします。"x" 座標は、2021 年 6 月および 7 月の毎日の datetime
値です。プロットでは、"x" 軸に適切な形式の目盛り値が自動的に表示されます。この場合、適切な形式は、月名および日番号と併せて年を示します。
XDates = [datetime(2021,6,1:30) datetime(2021,7,1:31)]; YNumsForXDates = sin(0:0.1:6); plot(XDates,YNumsForXDates)
同様に、"x" 軸に duration
値をもつデータ セットをプロットします。duration
配列を秒単位で作成するには、関数 seconds
を使用します。
XTimes = seconds(0:120); YNumsForXTimes = cos(0:0.05:6); plot(XTimes,YNumsForXTimes)
座標軸の範囲の指定
プロットの範囲を変更すると、datetime
値と duration
値に対して表示される目盛り値が自動的に更新されます。範囲は対話的に更新するか、対応する軸の関数 xlim
、ylim
、または zlim
を呼び出して更新できます。新しい範囲は datetime
配列または duration
配列として指定します。十分に拡大または縮小されるまで範囲を変更すると、目盛り値に新しい目盛り値だけでなく他の日付と時刻の成分を表示できます。
たとえば、配列 XDates
と配列 YNumsForXDates
をプロットします。次に、xlim
を使用して、"x" 軸の範囲を 2021 年 6 月 20 日~ 7 月 7 日に変更します。プロットに新しい目盛り値が表示されます。
plot(XDates,YNumsForXDates) xlim([datetime("2021-06-20") datetime("2021-07-07")])
"x" 軸の範囲を 2021 年 6 月 20 日~ 6 月 22 日に変更します。"x" 軸にさらに小さい時間単位が表示されるまでプロットが拡大されたため、目盛り値に "hh:mm" 形式の時成分と分成分が表示されます。
xlim([datetime("2021-06-20") datetime("2021-06-22")])
目盛り値の指定
目盛り値を変更するには、座標軸の範囲を変更する必要はありません。代わりに、関数 xticks
、yticks
、または zticks
を使用して、"x"、"y"、"z" の各軸に沿って独自の目盛り値を指定できます。目盛り値は datetime
配列または duration
配列として指定します。
たとえば、配列 XTimes
と配列 YNumsForXTimes
をプロットします。次に、xticks
を使用して 0 秒、60 秒、および 120 秒の目盛り値を指定します。
plot(XTimes,YNumsForXTimes) xticks(seconds([0 60 120]))
目盛りの形式の指定
プロット関数は、既定の形式を使用して datetime
値と duration
値を目盛り値として表示します。軸の目盛り値の形式をオーバーライドするには、関数 xtickformat
、ytickformat
、または ztickformat
を使用します。
たとえば、XDates
と YNumsForXDates
をプロットします。xtickformat
を使用して、年、月、日の番号を示す目盛り値の形式を指定します。
plot(XDates,YNumsForXDates)
xtickformat("yyyy-MM-dd")
あるいは、名前と値の引数 DatetimeTickFormat
または DurationTickFormat
を指定して plot
を呼び出すこともできます。たとえば、次の関数 plot
の呼び出しでは、同じプロットが作成されます。
plot(XDates,YNumsForXDates,"DatetimeTickFormat","yyyy-MM-dd")
ただし、これらの名前と値の引数は関数 plot
でのみ使用できます。xtickformat
などの関数は、scatter
、stem
、stairs
などの任意のプロット関数を呼び出した後に使用できます。
日付と時刻を格納する座標軸のプロパティ
ライン プロットの datetime
配列と duration
配列に関する軸の範囲、目盛りラベルの位置、および "x"、"y"、"z" の各値は、Axes
オブジェクトのプロパティとしても格納されます。次のプロパティは、ライン プロットのこれらの側面を表します。
XLim
,YLim
,ZLim
XTick
,YTick
,ZTick
XData
,YData
,ZData
たとえば、XDates
と YNumsForXDates
のプロットに関連付けられている XLim
プロパティと XTick
プロパティには datetime
値が格納されています。プロットの Axes
オブジェクトを取得してこれらのプロパティを表示します。
ax = gca; ax.XLim
ans = 1x2 datetime
2021-06-01 2021-08-03
ax.XTick
ans = 1x5 datetime
2021-06-01 2021-06-15 2021-06-29 2021-07-13 2021-07-27
データ ヒント値のエクスポートと変換
プロットをクリックした際に、そのカーソルの位置に "x" 座標と "y" 座標を表示するデータ ヒントを作成します。データ ヒントは数値と datetime
値および duration
値を表示します。ただし、カーソル データをワークスペースにエクスポートすると、座標は数値のペアとして報告されます。エクスポートしたカーソル データを datetime
値または duration
値に変換するには、関数 num2ruler
を使用します。
たとえば、XDates
と YNumsForXDates
をプロットします。次に、プロットをクリックしてデータ ヒントを作成します。
カーソル データをワークスペースにエクスポートするには、データ ヒントを右クリックし、[カーソル データをワークスペースにエクスポート] を選択します。この操作により、カーソル データがワークスペース内の構造体にエクスポートされます。
cursor_info = struct with fields: Target: [1×1 Line] Position: [25 0.5985] DataIndex: 26
cursor_info.Position
フィールドは、カーソル データを数値のペアとして表します。プロットに関連付けられている Axes
オブジェクトには、"x" 座標の数値を datetime
値に変換するために必要な情報が含まれています。プロットの Axes
オブジェクトを取得します。次に、数値の "x" 座標と Axes
オブジェクトの "x" 軸を num2ruler
に渡します。
ax = gca; datetimePosition = num2ruler(cursor_info.Position(1),ax.XAxis) datetimePosition = datetime 26-Jun-2021
このプロットの "y" 値は数値であるため、数値の "y" 座標 cursor_info.Position(2)
を変換する必要はありません。
ファイルからの日付と時刻のプロット
スプレッドシートや CSV ファイルなどのデータ ファイルでは、多くの場合、日付と時刻が書式設定されたテキストとして保存されます。このようなファイルからデータを読み取った場合は、日付と時刻を表すテキストを datetime
配列または duration
配列に変換できます。その後、そのデータのプロットを作成できます。
たとえば、サンプル データ ファイル outages.csv
のデータのプロットを作成します。この CSV ファイルには 6 列のデータがあります。2 列に日付と時刻を表すテキストが含まれています。
Region,OutageTime,Loss,Customers,RestorationTime,Cause SouthWest,2002-02-01 12:18,458.9772218,1820159.482,2002-02-07 16:50,winter storm SouthEast,2003-01-23 00:49,530.1399497,212035.3001,,winter storm SouthEast,2003-02-07 21:15,289.4035493,142938.6282,2003-02-17 08:14,winter storm ...
CSV ファイルからデータを読み取るには、関数 readtable
を使用する方法が推奨されます。この関数は、ファイルからデータを読み取って table に返します。
outages.csv
を読み取ります。関数 readtable
は、OutageTime
と RestorationTime
の列のテキストを datetime
配列に自動的に変換します。数値を表す列 (Loss
と Customers
) は数値配列として読み取られます。残りの列は string として読み取られます。table は、outages.csv
のデータの列を同じ名前の table 変数に格納します。最後に、関数 sortrows
を使用して、T
の行を OutageTime
の日付と時刻で並べ替えます。table が時刻で並べ替えられていない場合は、データをプロットまたは解析する前に table を時刻で並べ替えることをお勧めします。
T = readtable("outages.csv","TextType","string"); T = sortrows(T,"OutageTime")
T=1468×6 table
Region OutageTime Loss Customers RestorationTime Cause
___________ ________________ ______ __________ ________________ __________________
"SouthWest" 2002-02-01 12:18 458.98 1.8202e+06 2002-02-07 16:50 "winter storm"
"MidWest" 2002-03-05 17:53 96.563 2.8666e+05 2002-03-10 14:41 "wind"
"MidWest" 2002-03-16 06:18 186.44 2.1275e+05 2002-03-18 23:23 "severe storm"
"MidWest" 2002-03-26 01:59 388.04 5.6422e+05 2002-03-28 19:55 "winter storm"
"MidWest" 2002-04-20 16:46 23141 NaN NaT "unknown"
"SouthWest" 2002-05-08 20:34 50.732 34481 2002-05-08 22:21 "thunder storm"
"MidWest" 2002-05-18 11:04 1389.1 1.3447e+05 2002-05-21 01:22 "unknown"
"NorthEast" 2002-05-20 10:57 9116.6 2.4983e+06 2002-05-21 15:22 "unknown"
"SouthEast" 2002-05-27 09:44 237.28 1.7101e+05 2002-05-27 16:19 "wind"
"SouthEast" 2002-06-02 16:11 0 0 2002-06-05 05:55 "energy emergency"
"West" 2002-06-06 19:28 311.86 NaN 2002-06-07 00:51 "equipment fault"
"SouthEast" 2002-06-17 23:01 42.542 39877 2002-06-17 23:49 "thunder storm"
"MidWest" 2002-07-01 04:33 203.94 60650 2002-07-02 14:54 "severe storm"
"MidWest" 2002-07-01 08:18 100.71 1.8116e+05 2002-07-01 11:33 "severe storm"
"MidWest" 2002-07-10 01:49 168.02 NaN 2002-07-10 17:20 "equipment fault"
"SouthEast" 2002-07-14 21:32 90.83 60133 2002-07-14 23:53 "thunder storm"
⋮
table 変数にアクセスするには、ドット表記を使用して table 変数を名前で参照します。ドット表記を使用すると、table 変数を配列のように処理できます。
停電時刻に対する電力損失をプロットします。table のこれらの変数にアクセスするには、ドット表記を使用します。
plot(T.OutageTime,T.Loss)
停電の継続期間を計算して OutageTime
に対してプロットします。この継続期間を計算するには、OutageTime
を RestorationTime
から減算します。datetime
値を使った算術では出力として時間の長さが生成されるため、結果の OutageDuration
は duration
配列です。これらの停電期間の中には長いものがあるため、ytickformat
を使用して、"y" 軸の目盛り値の形式を時間から年に変更します。一見したところ一部の停電が何年も続いていることから、ファイルに問題のあるデータ値がいくつか含まれている可能性があることがわかります。データの解析方法に応じて、データを何らかの方法で再処理するか、不適切な値を含む行を削除できます。
OutageDuration = T.RestorationTime - T.OutageTime;
plot(T.OutageTime,OutageDuration)
ytickformat("y")
参考
plot
| datetime
| duration
| seconds
| readtable
| sortrows
| xlim
| xtickformat
| xticks