Main Content

日付と時刻のプロット

この例では、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 値に対して表示される目盛り値が自動的に更新されます。範囲は対話的に更新するか、対応する軸の関数 xlimylim、または 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")])

目盛り値の指定

目盛り値を変更するには、座標軸の範囲を変更する必要はありません。代わりに、関数 xticksyticks、または zticks を使用して、"x""y""z" の各軸に沿って独自の目盛り値を指定できます。目盛り値は datetime 配列または duration 配列として指定します。

たとえば、配列 XTimes と配列 YNumsForXTimes をプロットします。次に、xticks を使用して 0 秒、60 秒、および 120 秒の目盛り値を指定します。

plot(XTimes,YNumsForXTimes)
xticks(seconds([0 60 120]))

目盛りの形式の指定

プロット関数は、既定の形式を使用して datetime 値と duration 値を目盛り値として表示します。軸の目盛り値の形式をオーバーライドするには、関数 xtickformatytickformat、または ztickformat を使用します。

たとえば、XDatesYNumsForXDates をプロットします。xtickformat を使用して、年、月、日の番号を示す目盛り値の形式を指定します。

plot(XDates,YNumsForXDates)
xtickformat("yyyy-MM-dd")

あるいは、名前と値の引数 DatetimeTickFormat または DurationTickFormat を指定して plot を呼び出すこともできます。たとえば、次の関数 plot の呼び出しでは、同じプロットが作成されます。

plot(XDates,YNumsForXDates,"DatetimeTickFormat","yyyy-MM-dd")

ただし、これらの名前と値の引数は関数 plot でのみ使用できます。xtickformat などの関数は、scatterstemstairs などの任意のプロット関数を呼び出した後に使用できます。

日付と時刻を格納する座標軸のプロパティ

ライン プロットの datetime 配列と duration 配列に関する軸の範囲、目盛りラベルの位置、および "x""y""z" の各値は、Axes オブジェクトのプロパティとしても格納されます。次のプロパティは、ライン プロットのこれらの側面を表します。

  • XLim, YLim, ZLim

  • XTick, YTick, ZTick

  • XData, YData, ZData

たとえば、XDatesYNumsForXDates のプロットに関連付けられている 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 を使用します。

たとえば、XDatesYNumsForXDates をプロットします。次に、プロットをクリックしてデータ ヒントを作成します。

DatetimeDataTip.png

カーソル データをワークスペースにエクスポートするには、データ ヒントを右クリックし、[カーソル データをワークスペースにエクスポート] を選択します。この操作により、カーソル データがワークスペース内の構造体にエクスポートされます。

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 は、OutageTimeRestorationTime の列のテキストを datetime 配列に自動的に変換します。数値を表す列 (LossCustomers) は数値配列として読み取られます。残りの列は 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 に対してプロットします。この継続期間を計算するには、OutageTimeRestorationTime から減算します。datetime 値を使った算術では出力として時間の長さが生成されるため、結果の OutageDurationduration 配列です。これらの停電期間の中には長いものがあるため、ytickformat を使用して、"y" 軸の目盛り値の形式を時間から年に変更します。一見したところ一部の停電が何年も続いていることから、ファイルに問題のあるデータ値がいくつか含まれている可能性があることがわかります。データの解析方法に応じて、データを何らかの方法で再処理するか、不適切な値を含む行を削除できます。

OutageDuration = T.RestorationTime - T.OutageTime;
plot(T.OutageTime,OutageDuration)
ytickformat("y")

参考

| | | | | | | |

関連するトピック