値が正規分布に従わないときに対数変換したものをグラフにしたときにつけるラベルで悩んでいたのですが、
ちょうどよいコマンドを見つけましたのでご紹介します.
こんなやつを、対数変換して、
まあこれでもいいのですが、X軸のラベルをかっこよく整えたい!
そこで、
“mylabels”
の登場です.
いつものように
.findit mylabels
これをインストールします.
.mylabels a1 a2 a3 … , myscale(関数(@)) local(lclname)
.何らかのgraph syntax, xlabel(`lclname’)
で出来上がりです.
(2021/10/23 追記) もう少し詳しく解説してまいります.
まず、このmylabelsのコマンドを説明する前に、軸のラベルについて説明します.
xlabel, ylabelは自動的に値の範囲に応じていい具合に値を割り振ってつけてくれます.
sysuse auto, clear
histogram mpg
これを、値の範囲や細かさを調整してくれるのがxlabelオプションの役目でした.
この記事で紹介していたように、
scatter yvar xvar, xlabel(1 "Low" 2 "Med" 3 "Hi")
この部分を拡張させてラベルを表示させたのが今回の”mylabels”というわけです.
Syntaxは以下のようになっております.
mylabels 1 10 100 500 1000, myscale(ln(@)) local(xla)
histogram lnxvar, xtitle("Xvar") xlabel(`xla')
すると、まずこのmylabelsのsyntaxを実行すると、
. mylabels 1 10 100 500 1000, myscale(ln(@)) local(xla)
0 “1” 2.302585092994046 “10” 4.605170185988092 “100” 6.214608098422191 “500” 6.907755278982137 “1000”
こんな感じにそれぞれの値にどの文字列を置くかを指定する、というイメージです.
またそのときに生成されたローカルマクロをその次の行にあるhistogramのsyntaxで使いますので、
2つのプログラムは同時に実行しなければなりません.
そうすることで初めて機能します.
ここで、lnxvarは対数変換後のxvarのことです. 上のln(@)の部分と対応します.
すなわち、sqrt(@)であれば、xvarはsqrt変換したあとの値をいれないといけませんので注意してください.
なお、
.twoway function, xscale(range(a b) log)
とやってもlogのスケールでできますが、ときどきうまくいかないことがあり、悩んでいました.
このコマンドにしたらそれが解決したので知っておくと便利かと思いました.
さらに詳しいことは、インストール後にhelpをご覧ください.
コメント
[…] それと、横軸がlog変換後の亜鉛摂取量となっているのでちょっと見づらいです.mylabelsを使ってあげればlog変換値を入れることなく軸ラベルをつけられます.(以前の記事を参照) […]