twowayグラフと軸の設定

グラフ

このブログでは、統計解析ソフトStataのプログラミングのTipsや便利コマンドを紹介しています.

Facebook groupでは、ちょっとした疑問や気づいたことなどを共有して貰うフォーラムになっています. ブログと合わせて個人の学習に役立てて貰えれば幸いです.

さて、今回はtwowayグラフを作成する際の、軸スケールの基本設定について紹介します.

軸の設定は以下の4つに分かれます.

  1. 軸タイトル (axis_title_options): 軸のすぐとなりに現れるタイトル
  2. 軸ラベル (axis_label_options): 軸の目盛りラベルや目盛りの幅
  3. 軸スケール (axis_scale_options): スケールの種類と値の範囲を決める.対数軸にするか等も含まれる
  4. 軸の選択 (axis_choice_options): 複数のX、Y軸を設定する

各エレメントがグラフのどの部分に表現されるのかを表すと下の図のようになります.

具体的には軸タイトルはxtitle, ytitle, 軸スケールはxscale, yscale, 軸目盛りの振り方はxlabel, ylabelのオプションをつけます.

第二軸の設定はxaxis(#), yaxix(#)のオプションで設定します.

本稿では、twowayグラフの一般論に続いて軸の設定方法を順番い解説していきます.基本的なlegendの設定方法については別のページを参照してください.

1.twowayグラフの基本

twowayグラフはいくつかのグラフを重ねて表示するのになくてはならないツールです.

散布図に回帰直線を追加したり↓

ヒストグラムにヒストグラムを重ねたり↓

いろいろなことができます.

基本的なsyntaxは、

.twoway function yvar xvar

ここで”function”は何らかの関数を表します.

ここに入るのは、

  • 散布図:scatter
  • 直線:line
  • 回帰直線:lfit
  • 信頼区間付き回帰直線:lfitci
  • 領域:area
  • 棒グラフ:bar
  • ヒストグラム:histogram
  • 等高線:contour

などがあります.

グラフを重ねたいときは、

.twoway (式1)(式2)(式3)

でもいいですし、

.twoway 式1 || 式2 || 式3 

でもいいです.

一つ一つの関数式にオプションを追加したりすることがあるので、

改行コマンドをうまく組み合わせて見やすくしたりもします.

#delimit;
   twoway 
    function1 yvar xvar, option (この関数式のグラフの線や色に関するオプション)
      ||
    function2 yvar xvar, option (この関数式のグラフの線や色に関するオプション)
    ,
    option (スケールや凡例に関するオプションで、グラフ全体に関するもの)
    ;
#delimit cr 

さて、そんなtwowayグラフですが、その機能を活かすためには軸スケールの設定は欠かせません.

2.xscale / yscaleの基本的な表し方

ここから今日の話題の中心である軸スケールの設定について解説します.

X軸の設定を中心に見ていきます.(Y軸についてはx→y とするだけです)

  • 反対側に表示させたい: alt
  • 大小反転させたい:reverse
  • (常用)対数軸で表示させたい:log
  • 値の範囲を規定したい:range(a b) … aからbの範囲で表示するということ
  • 軸の太さを変えたい:lwidth( ) … 太さを()の中に入れる(thickなど)
  • 軸の線を消したい:noline
  • 軸そのものの表示をやめたい:off

ここでグラフ表示の範囲に関する注意ですが、range(a b)だけでは十分ではありません.その範囲を超えて計算された値もグラフフィールドに出現してしまうからです.そうすると指定した軸のラベルだけが表示されたへんてこりんなグラフになってしまいます.そんなときはx軸の値の範囲を限定するようにif節を置くことが必要になります.

scatter yvar xvar, xsc(r(10 50))
scatter yvar xvar if xvar>=10 & xvar<=50

3.軸ラベルの設定方法

軸ラベルの設定は、メインの目盛りとその間の細かい目盛りを設定したり、目盛りにふられるラベルの表示の向きを決めたりするのに主に役立ちます.

ラベルの設定をしたい場合にはxlabel, ylabelのオプションを使います.基本はscale optionとよく似ていますが、scaleの場合は()の中に入れる上記のコマンドはコンマ無しで入れます.これに対してlabelの場合には値の範囲を入れるのはrange関数が不要なのでいいのですが、その他のことがたいていはコンマ有りのオプションの形になっているので、そこだけ注意が必要です.

まずはオーソドックスなラベル表示方法ですが、

.xlabel(0(5)25) とやれば、0から25まで5刻みでラベルをつけていくことを意味します.

値ラベルを表示させたい場合には、.xlabel(# # #, valuelabel)のようにすると、その数値がもつ値ラベルを表示させることができます.

以下の様に値ラベルを設定することもできれば、また一つずつ指定することもできますので、どちらも使えるようにしておくとよいでしょう.

label define cat 1 "Low" 2 "Med" 3 "Hi"
label values xvar cat
scatter yvar xvar, xlabel(1 2 3, valuelabel)
   /* あるいは以下の様なやり方でもよい */
scatter yvar xvar, xlabel(1 "Low" 2 "Med" 3 "Hi") 

何桁まで表示するかを決めるのはformat()をオプションでつけることで解決できます.小数点第二位までとすると、

scatter y1var y2var xvar, ylabel(,format(%9.2fc)) 

軸ラベルがわちゃわちゃして見づらいときにはalternateオプションで見やすくすることもできます.奇数番目と偶数番目のラベルを2段で表示するようなやり方です.

わちゃわちゃして見づらいときにラベルに角度をつけるのもよいでしょう.angle(90)とすれば90度にすることができますし、angle(45)とすれば斜め45度になります.y軸は90度でlabelが付いているので、angle(0) で0度にすると水平になります.

twoway scatter mpg price, ylabel(,ang(0)) xlabel(0(1000)16000,alternate) 

4.第二軸の設定方法

重ねたグラフのスケールが桁違いのとき、非常にちぐはぐなグラフになってしまいます.↓

#delimit;
	twoway scatter weight price, mcolor(maroon)
	|| 
	scatter length price, mcolor(navy)
	;
#delimit cr 

これを避けるためには軸をもう一つ追加するとよいでしょう.

twoway (function1 yvar1 xvar ) (function2 yvar2 xvar, yaxis(2)), ///
yscale(range(a b) axis(1)) yscale(range(c d) axis(2))

重ね合わせるグラフの関数式のうち、第二軸にしたい側にオプションでyaxis(2)を追加します.

さらにyscaleオプションを全体に追加して、それぞれの軸スケールの設定をします.

さて、先ほどの図ですが、

#delimit;
	twoway scatter weight price, mcolor(maroon)
	|| 
	scatter length price, mcolor(navy) yaxis(2)
	,
	yscale(range(2000 5000) axis(1))
	yscale(range(140 240) axis(2))
	;
#delimit cr 

もちろん片方を対数表示にすることもできます.

5.まとめ

軸の設定方法について、①タイトル、②スケール、③ラベル、④複数軸に分けて解説しました.さらに詳しく知りたい方は以下の書籍を購入してじっくり読まれることをオススメします.

ちなみに、外部サイトでわかりやすかったものとして、

こちらのサイト

が参考になりました.

コメント

  1. […] これを、値の範囲や細かさを調整してくれるのがxlabelオプションの役目でした. […]

タイトルとURLをコピーしました