SAS

blockplotステートメントで時系列データを時期別に色分けする

以下のグラフは東京都の新型コロナウィルス陽性患者の人数の推移をプロットしたものです。

東京都の新型コロナウィルス陽性患者人数

グラフは問題ないのですが、これだとおそらく患者数のピークだと思われる4月はグラフのどのあたりなのかわかりにくいですね。軸の設定を変えるのも手ですが、今回は月ごとにグラフを色分けして見やすくします。

blockplotステートメント

色分けするにはblockplotステートメントを使います。blockplotステートメントはx軸の範囲に対応したテキストラベルを帯で表示します。Y軸の情報は含みません。なおX軸のデータはあらかじめソートしておく必要があります。

先ほどの折れ線グラフにblockplotを上書きしてグラフエリア全体を月ごとに色分けしましょう。まずデータセットにあらかじめテキストラベルとなる月ラベルを格納した変数を新規作成し、これをblockplotに利用します。

OVERLAYレアウトの中にblockplotステートメントを設置し、折れ線グラフに重ね書きします。

この時blockplotステートメントのdatatransparencyオプションで透過度を上げて折れ線グラフが見えるようにします。

data ds1;
   length Month $100;
   set raw; /* 月ラベルの作成 */
   Month= put(month(date), 8.0) || "月";
   label date="日付"
   COUNT="患者数";
proc sort; by date;
run;

proc template;
define statgraph blockplot;
begingraph;
entrytitle "東京都 新型コロナウイルス陽性患者";
   layout overlay / 
       xaxisopts=(griddisplay=on)
       yaxisopts=(griddisplay=on);
   seriesplot x=date y=COUNT / 
      name="series"
      group=GROUP;
   blockplot x=date block=Month / 
      datatransparency=0.7
      valuevalign=top
      labelposition=top
      display=(fill values)
      extendblockonmissing=true ;
   discretelegend "series";
   endlayout;
endgraph;
end;
run;

proc sgrender data=ds1 template=blockplot;
run;
実行結果

かなり見やすくなりました。五月に入ってから急激に報告された患者が減っています。
時系列データの色分けは結構有用なテクニックなので参考にしてください。