1

を使用して 2 つの軸を同時にグラフ化しようとしていtwowayます。1 つの軸は変数を使用して、とrouteを使用して通常の記号を置き換えます。もう一方の軸は、プロット領域に特定のラベルを必要としませんが、理想的には凡例に「増分用量」としてキーを付ける必要があります。mlabelmsymbol(none)

legend(order)この仕様を使用して凡例ラベルを作成すると、望ましくない結果が生じます。コード化された凡例には、2 番目の軸の記号が 3 番目に並べられた凡例項目として含まれています。コードが 2 番目の軸のシンボルを 5 番目の項目として配置することを期待します。この問題は、未使用の 5 度にダミー カテゴリを追加routeし、グラフ エディタを使用してシンボルを手動で移動することで解決できます。legend(order)オプションがこのように動作する理由、またはとの相互作用があるかどうか、およびコーディングソリューションが繰り返しアプリケーションで使用できるかどうかを知りmlabelたいmsymbol(none).

*create data
clear 
set seed 42
set obs 50

gen cuml_dose = rnormal(0,1) *10 + 100
sort cuml_dose
gen interval = [_n] 
gen id = 1
gen incr_dose =0
replace incr_dose = cuml_dose[_n+1] - cuml_dose if [_n] > 1
gen route = rpoisson(1)
tab route,m

*create problem graph
sort interval
twoway  scatter cuml_dose interval, mlabel(route) msymbol(none) yaxis(1) || ///
    scatter incr_dose interval,  yaxis(2) ///
    legend(on) legend(order(0 "0=oral" 1 "1=IV" 2 "2=IM" 3 "3=patch"))

*partial solution
twoway  scatter cuml_dose interval, mlabel(route) msymbol(none) yaxis(1) || ///
    scatter incr_dose interval,  yaxis(2) ///
    legend(on) legend(order(0 "0=oral" 1 "1=IV" 2 "2=IM" 3 "3=patch" 4 "Incr. dose"))
4

1 に答える 1

2

自己完結型の例をありがとう。

検討

scatter cuml_dose interval, mlabel(route) ms(none) yaxis(1) /// 
|| scatter incr_dose interval, yaxis(2) ///
legend(on order(- "0 = Oral" - "1 = IV" - "2 = IM" - "3 = patch" 2 "Incr. dose")) 

最後のグラフでは、

  1. cuml_doseプロットされる最初の変数です。複数の異なる値を持つマーカー ラベルを使用するという事実は、カウントには関係ありません。0なので、0~3には対応していませんorder()。最も重要なことは、マーカー ラベルは単なるテキストでありgraph、指示どおりに表示する以上のテキストは気にしないことです。

  2. incr_doseプロットされる 2 番目の変数です。したがって、order(2...を使用します)

  3. 上記のように、ダッシュ構文を使用して凡例に任意に追加できます。

  4. ここでは、凡例を定義する上で、2 つの軸の使用が問題になることはまったくわかりません。任意のy軸にプロットされたものを数えているだけです。

結論:構文で変数が言及されている順に、任意のy軸にプロットされたものを数えます。

于 2016-08-03T22:16:05.527 に答える