このブログでは、統計解析ソフトStataのプログラミングのTipsや便利コマンドを紹介しています.
Facebook groupでは、ちょっとした疑問や気づいたことなどを共有して貰うフォーラムになっています. ブログと合わせて個人の学習に役立てて貰えれば幸いです.
今回はグラフ中のLegendの設定方法をまとめてみます.すでに何度かサンプルコードを示してきたので、ある程度既出なのですが、一度整理しておきたいと思います.
まず、いつものautoデータセットを使ってグラフを作ります.散布図と回帰直線、4次関数回帰曲線を重ねたグラフを作ってみます.
sysuse auto, clear
twoway (scatter mpg price) (lfit mpg price) (qfit mpg price)

これをベースにしてLegendの描き方の基本を整理します.
1.Legendの項目名(ラベル)の設定
ここではラベル設定方法を2つ紹介します.label関数とorder関数です.
1つ目のlabel関数ですが、以下の様に一つずつつけていくのが特徴です.
twoway (scatter mpg price) (lfit mpg price) (qfit mpg price), ///
legend(label(2 "Linear predicted MPG") label(3 "Quadratic predicted MPG"))
label(2 “”)となっている番号はtwowayのあとに3つ式が並んでいてグラフをそれぞれ表しますが、その順番のことです.Linear predictionが2ですので、それの名前をこうやって表現しますよ、という風に書いていきます.

同じことを別の方法で表現するとき、order関数を使います.このとき、番号をかかないと勝手に省略されてしまいますので注意です.
label関数の場合、名前を指定したい時だけ書けばよかったのに対して、orderでは指定しないとき、番号だけ書いておく必要があります.
twoway (scatter mpg price) (lfit mpg price) (qfit mpg price), ///
legend(order(1 2 "Linear predicted MPG" 3 "Quadratic predicted MPG"))
2.legendの表示方法を変える
1)行列の指定
Legendに記入する要素が複数あるとき、縦に並べるか横に並べるか、あるいはどういった順番で並べるかを指定するのがcolumn関数とrow関数になります.columnが縦に何列か、rowが横に何行かを数字を入れて指定します.
twoway (scatter mpg price) (lfit mpg price) (qfit mpg price), ///
legend(order(1 2 "Linear predicted MPG" 3 "Quadratic predicted MPG") ///
col(1) row(3))

縦に並べていくのを優先する場合はcolfirst、マーカーよりラベルを左に書く場合はtextfirstなどと入れておきます.
2)Legendの位置決め
グラフエリアに入れたい場合にはring(0)、場所は時計回りでposition(#)の#に番号を入れていきます.
twoway (scatter mpg price) (lfit mpg price) (qfit mpg price), ///
legend(order(1 2 "Linear predicted MPG" 3 "Quadratic predicted MPG") ///
col(1) row(3) ring(0) position(1))

positionの番号は、0~12までの数字を入れるのですが、0はど真ん中です.あとは1時から12時まで時計回りに配置されます.
3.Legendにタイトルを入れる
Legendにタイトルを入れるのはtitle(“”)です.そのサイズや文字の色はタイトル名のあとにオプションとして追加します.
twoway (scatter mpg price) (lfit mpg price) (qfit mpg price), ///
legend(order(1 2 "Linear predicted MPG" 3 "Quadratic predicted MPG") ///
col(1) row(3) ring(0) pos(1) ///
title("Legend", color(red) size(huge)))

4.Legendのサイズ変更
Legendのラベルの大きさや文字の設定は単純にsize(), color()で設定するだけです.
タイトルの大きさの変更は先ほどの項でも示しましたが、titleの中で処理します.
twoway (scatter mpg price) (lfit mpg price) (qfit mpg price), ///
legend(order(1 2 "Linear predicted MPG" 3 "Quadratic predicted MPG") ///
col(1) row(3) ring(0) pos(1) ///
title("Legend", color(red) size(huge)) ///
size(large) color(navy))

5.その他のポイント
その他お役立ち情報です.まず、層別にグラフを分けたときにLegendの場所を決めておけるオプションです.これはby(層, legend(at(#)))で指定できます.下の例では、1~5まで分けられる層で別々にグラフを描いて、6枚目のところにLegendを配置するというものです.

さらにby(層, legend(position(center) at(#))) などとやれば6枚目のパネルのどの位置に来るかまで指定できます.
ちなみに、ラベルのところを敢えて二つのクォーテーションマークにしているのは、それを2行に分けることができるからです.
6.まとめ
Legendに関する基本的な事項をまとめました.さらに詳しいことを知りたければ以下の書籍が役に立ちます.
コメント
[…] 本稿では、twowayグラフの一般論に続いて軸の設定方法を順番い解説していきます.基本的なlegendの設定方法については別のページを参照してください. […]