MATLAB: timedateのデータのx軸の目盛りを各月にする

MATLABでtimedateデータをプロットすると、横軸は「よろしく」やってくれます。

これを少し手を変えたい時は多々ありますね。

東京のPCR陽性者数と人出の関係では横軸のtickを毎月に変更しています。 もともと4ヶ月ごとになっていました。

その場合は次のようなコードを使っています:

plot(positive_date, movmean(positive_daily,7))
ylabel("PCR 陽性者数")
xl = xlim; 
xt = xl(1) + calmonths(0:1:(2021-2020)*12+3);
xticks(xt)
ax_h1 = gca;
ax_h1.XAxis.TickLabelRotation = 45;

元ネタはhow to set a frequency of x axis of a plot?です。

xlimはx軸の範囲の上限・下限を取得しています。

>> xl

xl = 

  1×2 の datetime 配列

   2020-01-01   2021-04-01

となっています。xl(1)が下限、xl(2)が上限です。

ここでのキモは

xt = xl(1) + calmonths(0:1:(2021-2020)*12+3);

です。 calmonths を使ってカレンダー月数を表す配列を計算しています:

>> calmonths(0:1:(2021-2020)*12+3)

ans = 

  1×16 の calendarDuration 配列

1 列から 15 列

      0mo      1mo      2mo      3mo      4mo      5mo      6mo      7mo      8mo      9mo     10mo     11mo       1y   1y 1mo   1y 2mo

列 16

   1y 3mo

「ヶ月」ということですね。0月から1年3ヶ月分の毎月の配列です。

これをxl(1)と足し算すると次のようになります:

>> xt

xt = 

  1×16 の datetime 配列

1 列から 10 列

   2020-01-01   2020-02-01   2020-03-01   2020-04-01   2020-05-01   2020-06-01   2020-07-01   2020-08-01   2020-09-01   2020-10-01

11 列から 16 列

   2020-11-01   2020-12-01   2021-01-01   2021-02-01   2021-03-01   2021-04-01

これをxticksで指定すると各月がticksになります。