SAS_GTL

SAS PlotterでRidgeline plotを作図する

「SAS Plotter」はモダンなグラフを簡単に作成できるグラフマクロパッケージです。
このページではSAS Plotter(ver 1.2) でRidgeline plotを作成する方法を解説します。

2023/11/1 ver1.1に更新

2024/2/1 ver1.2に更新

四分位数別の塗分けに対応し、いくつかのパラメータを削除、追加しました。

https://picolabs.jp/sasplotter_usage

Ridgeline plotとは

Ridgeline plotまたはjoy plotは応答変数の分布をグループごとにプロットする作図手法です。

分布はカーネル密度推定で推定した密度をプロットすることで表現します。
またrugplotを併用することで個別データの可視化も可能です。

Rではggplot2を使った作図例が多数紹介されています。

Ridgelineマクロの使用方法

SAS Plotterでは%Ridgelineマクロを使用することで作成できます。
さらに各種記述統計量の表示も可能です。

Input data

key変数変数タイプ
1カテゴリ変数数値または文字列
2群変数数値または文字列
応答変数数値

群変数は任意です。群変数とカテゴリ変数は文字列型でも動作しますが、その場合はテキストの昇順でグループの表示順を決定します。
順番を定義したい場合はフォーマットを適用した数値変数を使用することを推奨します。

文法

ods graphics / < graphics option > ;
ods listing gpath=< output path >;

%macro ridgeline(
   data=,
   x=,
   y=,
   group=None,
   xlabel=x,
   ylabel=y,
   yticks=,
   cat_iv = 1.2,
   gridsize = 401,
   bw_method = sjpi,
   bw_adjust = 1,

   quartile=False,
   mean=False,

   legend = False,
   grouplegendtitle=group,

   rug = False,
   ruglength = 2,

   fillstyle=None,
   qgradient=1,
   palette=sns);

パラメータ

data : (必須)

入力データ。rename, whereオプションを併用できます。

x : (必須)

カテゴリ変数

y : (必須)

応答変数

group : (任意)

群変数。xオプションと同じ変数を指定すると、各グループはそれぞれ別の色で塗り分けられます。指定しない場合はすべてのオブジェクトは同じ色になります。デフォルト=None

xlabel : (任意)

カテゴリ軸のラベル。デフォルトは「x」。以下のように設定するとラベルは非表示となります。xlabel=,

ylabel : (任意)

応答変数軸のラベル。デフォルトは「y」。以下のように設定するとラベルは非表示となります。ylabel=,

yticks : (必須)

応答変数軸の目盛りを指定できます。半角スペースで区切られた数値リストを指定してください。数値は昇順で指定する必要があります。(例)yticks = 10 20 30 40,

cat_iv : (任意)

各カテゴリの間隔。デフォルトは1.2。1未満にするとグラフ同士が重なる可能性があります。

gridsize : (任意)

KDEのグリッド数。デフォルトは401(proc kdeのデフォルト値)

bw_method : (任意)

KDEのバンド幅推定方法を指定します。デフォルトはsjpi(proc kdeのデフォルト値)。利用可能な推定方法は以下の通りです。

  • sjpi (Sheather-Jones plug-in)
  • snr (simple normal reference)
  • snrq (simple normal reference that uses the interquartile
    range)
  • srot (Silverman’s rule of thumb)
  • os (oversmoothed)

bw_adjust : (任意)

バンド幅のファクター。この値を大きくすると密度はより滑らかになります。デフォルトは1。

quartile: (任意)

Trueにすると四分位線を表示します。デフォルトはFalse。

mean: (任意)

Trueにすると平均線を表示します。デフォルトはFalse。

legend : (任意)

Trueを指定すると凡例を表示します。groupオプションを”None”を指定するとこの引数は無視されます。 デフォルトはFalse。

grouplegendtitle: (任意)

groupパラメータで指定した群の凡例タイトルを指定します。LegendパラメータがTrueではない場合は無視されます。デフォルトは”Group”。

fillstyle: (任意)

塗りつぶし設定を変更できます。以下のキーワードのいずれかを指定できます。デフォルトはNone(塗りを設定しない)。

  • None: 塗りつぶしを非表示にします。
  • Group: groupパラメータで指定した変数に基づいて密度プロットを塗りつぶします。
  • Quartile: 密度プロットを4分位点ごとに分割して塗りつぶします。

qgradient: (任意)

Fillstyleパラメータでquartileを指定した場合、四分位のカラーグラジエントパターンを指定できます。現在は7種類のグラジエントパターンが登録されており、IDを指定することで切り替えることができます。デフォルトは1。

なお利用できるカラーグラジエントは以下の通りです。

カラーグラジエント一覧

rug : (任意)

Trueを指定するとrugplotを表示します。デフォルトはFalse。

ruglength : (任意)

rugplotの長さを制御します。値を大きくするとrugplotを伸ばします。
rugオプションをFalseに指定した場合はこのオプションは無視されます。
デフォルトは1。

palette : キーワード (オプション)

塗り、ライン、マーカーのカラーパレット、以下のパレットが利用可能です。デフォルトはSNS(seabornのデフォルトパレット)

  • SAS
  • SNS (Seaborn)
  • STATA
  • TABLEAU

作図例

シンプルなridgeline plot

以下のテストデータを用いてridgeline plotを作成してみます。

datasets (tokyo_naha_temp)

variabletypedetail
month数値Jan-Dec
region数値1=Tokyo 2=Naha
max_temp数値日中最高気温

 

ods graphics /reset=all height=15cm width=25cm imagename="ridgeline_simple" imagefmt=svg;
ods listing gpath="<output path>";

%ridgeline(
   data=tokyo_naha_temp(where=(month in(1:6) and region=1)),
   x=month,
   y=max_temp,
   xlabel=month,
   ylabel=maximum temperature (℃),
   yticks=0 5 10 15 20 25 30 35 40
   );
実行結果

グループ毎に表示

groupパラメータを指定すると塗りつぶしが利用できます。fillstyleパラメータを設定しない場合はグループに応じて線の色が変わります。塗りを適用する場合はfillstyleパラメータをgroupに変更します。

ods graphics /reset=all height=15cm width=25cm imagename="ridgeline_simple_grouped" imagefmt=svg;
ods listing gpath="<output path>";

%ridgeline(
   data=tokyo_naha_temp(where=(month in(1:6))),
   x=month,
   y=max_temp,
   group=region,
   xlabel=month,
   ylabel=maximum temperature (℃),
   yticks=0 5 10 15 20 25 30 35 40,
   grouplegendtitle=Region,
   legend=true
   );
実行結果

記述統計量および個別値の表示

平均値と4分位点の表示をサポートしています。四分位点は点線、平均値は実線で表現されます。ラグプロットを使用すれば個別値の表示も可能です。

ods graphics /reset=all height=15cm width=25cm imagename="ridgeline_stat" imagefmt=svg;
ods listing gpath="<output path>";

%ridgeline(
   data=tokyo_naha_temp(where=(month in(1:6) and region=1)),
   x=month,
   y=max_temp,
   group=region,
   xlabel=month,
   ylabel=maximum temperature (℃),
   yticks=0 5 10 15 20 25 30 35 40,
   grouplegendtitle=Region,
   legend=true,
   mean=true,
   quartile=true,
   rug=true
   );
実行結果

塗りスタイル

密度プロットの塗りスタイルは非表示、グループ、4分位の三つをサポートしています。

グループと4分位はgroupパラメータを設定した場合のみ使用可能です。

ods graphics /reset=all height=15cm width=20cm imagename="ridgeline_fill_group" imagefmt=svg;
ods listing gpath="<output path>";

  %ridgeline(
     data=tokyo_naha_temp(where=(month in(1:6))),
     x=month,
     y=max_temp,
     group=region,
     xlabel=month,
     ylabel=maximum temperature (℃),
     yticks=0 5 10 15 20 25 30 35 40,
     grouplegendtitle=Region,
     fillstyle=group,
     legend=true,
     mean=false,
     quartile=true,
     rug=true
fillstyle=group
ods graphics /reset=all height=15cm width=20cm imagename="ridgeline_fill_quartile" imagefmt=svg;
ods listing gpath="<output path>";

%ridgeline(
   data=tokyo_naha_temp(where=(month in(1:6) and region=1)),
   x=month,
   y=max_temp,
   group=region,
   xlabel=month,
   ylabel=maximum temperature (℃),
   yticks=0 5 10 15 20 25 30 35 40,
   grouplegendtitle=Region,
   fillstyle=quartile,
   legend=true,
   mean=false,
   quartile=true,
   rug=true
   );
fillstyle=quartile