バタフライプロットとは以下のような真ん中から両端に向かって伸びる棒グラフです.見たことはありましたが先日初めて名前をしりました.
早速上のグラフを書いたプログラムを貼りますが,x軸は頻度なのでまず数えます.頻度を出したデータの内,左側(青い方)に出したいものは-1をかけて頻度を無理やり負の数にします.そのままSGPLOTに読み込ませて,x軸ラベルの表示を正の数に変えれば完成です.
proc freq data= sashelp.class noprint;
tables sex * age / out = V_CLASS ;
run ;
tables sex * age / out = V_CLASS ;
run ;
data V_BF ;
set V_CLASS ;
set V_CLASS ;
if SEX = "男子" then do ;
V_CNT = COUNT * -1 ; /*頻度を負の値に変換*/
V_SEX = 1 ;
end ;
V_CNT = COUNT * -1 ; /*頻度を負の値に変換*/
V_SEX = 1 ;
end ;
if SEX = "女子" then do ;
V_CNT = COUNT ; /*頻度はそのまま*/
V_SEX = 2 ;
end ;
run ;
V_CNT = COUNT ; /*頻度はそのまま*/
V_SEX = 2 ;
end ;
run ;
proc sgplot data = V_BF ;
hbar AGE / response=V_CNT group = V_SEX barwidth = 1.0;
hbar AGE / response=V_CNT group = V_SEX barwidth = 1.0;
xaxis
values=(-5 to 5 by 1) /*データ上は-5から5まで*/
valuesdisplay=("5" "4" "3" "2" "1" "0" "1" "2" "3" "4" "5") /*メモリの表示を指定*/
;
yaxis
values = (10 to 20 by 1)
grid /*格子線あった方が多分見やすい*/
values=(-5 to 5 by 1) /*データ上は-5から5まで*/
valuesdisplay=("5" "4" "3" "2" "1" "0" "1" "2" "3" "4" "5") /*メモリの表示を指定*/
;
yaxis
values = (10 to 20 by 1)
grid /*格子線あった方が多分見やすい*/
reverse /*y軸の値の並びを大から小にする*/
;
run ;
;
run ;
マイナスでデータを持たせて左右に表示して,軸のメモリ表示は正の値として指定するのってなんだかイマイチな気がします.わざわざ手でメモリ値を指定するのて結構煩雑ですし…いい感じに指定する方法があればいいんですが,どなたかご存じないですか?
GTLですが、以下の記事でご紹介しています。
返信削除https://superman-jp.hatenablog.com/entry/SAS-GTL-butterfly-chart
おおーありがとうございます.見てみます.
削除私はGTLをあまり使ったこと無いですが,GTLの方が設定がやりやすくていいところがありますよね.