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になります。