2016-08-03 25 views
1

我試圖同時使用twoway來繪製兩個座標軸。一個軸使用變量route來替換通常的符號,使用mlabelmsymbol(none)。另一個軸在繪圖區域中不需要特定的標籤,但理想情況下應該在圖例中鍵入「增量劑量」。Stata:具有多個軸的圖例項目的順序

使用legend(order)規範創建圖例標籤時會出現不希望出現的結果。作爲編碼的圖例將第二個軸的符號作爲第三個有序的圖例項目。我希望代碼將第二個軸的符號作爲第五個項目。該問題可以通過爲未使用的第五個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")) 

回答

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到3.我很驚訝在order()中允許提及0。最重要的是,標記標籤只是文本,並不關心文本是如何按照指示顯示的。

  2. incr_dose是繪製的第二個變量:因此使用order(2 ... )

  3. 您可以使用破折號語法隨意添加到圖例中,如上所述。

  4. 我看不出使用兩個軸在定義圖例時存在問題。我們只計算在任何軸上繪製的內容。

底線:算什麼是在語法變量提到的順序繪製在任何Ÿ軸。

相關問題