2016-08-03 2 views
1

twoway을 사용하여 두 축을 동시에 그래프로 표시하려고합니다. 한 축은 변수 route을 사용하여 mlabelmsymbol(none)을 사용하여 일반적인 기호를 대체합니다. 다른 축은 플롯 영역에서 특정 레이블을 요구하지 않지만 이상적으로는 "Incr. Dose"로 범례에 입력해야합니다.Stata : 여러 축을 가진 범례 항목의 순서

legend(order) 사양을 사용하여 범례 레이블을 만들 때 바람직하지 않은 결과가 발생합니다. 코드화 된 범례는 두 번째 축에 대한 기호가 3 번째로 주문 된 범례 항목으로 표시됩니다. 코드에서 두 번째 축의 심볼을 다섯 번째 항목으로 배치 할 것으로 기대합니다. 이 문제는 사용되지 않은 5th route에 대해 더미 카테고리를 추가하고 그래프 편집기를 사용하여 기호를 손으로 움직여 해결할 수 있습니다. mlabel 또는 msymbol(none)과의 상호 작용 여부와 반복적 인 응용 프로그램에서 사용할 수있는 코딩 솔루션이 있는지 여부를 확인하려면 왜 legend(order) 옵션이 이러한 방식으로 작동하는지 알고 싶습니다.

*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

감사합니다. 당신은 몇 가지 고유 한 값으로 마커 라벨을 사용한다는 사실은 계산에 무관하다 :

  1. cuml_dose이 그려진 첫 번째 변수 마지막 그래프에서

    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")) 
    

    을 고려하십시오. 그래서 0-3에 해당하지 않습니다. 0에 대한 참조가 order()에 허용된다는 사실에 놀랐습니다. 가장 중요한 것은 마커 라벨이 텍스트 일 ​​뿐이며 은 텍스트가 지시 한대로 표시되지 않는 것에 신경을 쓰지 않습니다.

  2. incr_dose은 두 번째 변수입니다. 따라서 order(2 ... )을 사용하십시오.

  3. 당신은 위와 같이, 대시 구문을 사용하여 임의의 전설에 추가 할 수 있습니다.

  4. 나는 두 축 사용이 ​​전설을 정의하는 모든 여기에 문제가 있음을 볼 수 없습니다. 우리는 단지 y 축에 무엇이 그려지는지 세고 있습니다.

결론 : 구문 변수의 기재 순서로 어떤 Y 축에 그려 어떤 계산.