Graph Stata:具有多个轴的图例项的顺序

Graph Stata:具有多个轴的图例项的顺序,graph,stata,legend-properties,multiple-axes,Graph,Stata,Legend Properties,Multiple Axes,我正在尝试使用twoway同时绘制两个轴。一个轴使用变量route替换常用符号,使用mlabel和msymbol(none)。另一个轴在绘图区域中不需要特定标签,但理想情况下应在图例中键入“增量剂量” 使用图例(订单)规范创建图例标签时,会出现不希望出现的结果。编码的图例将第二个轴的符号作为第三个顺序图例项。我希望代码将第二个轴的符号作为第五项。通过为未使用的第五条路线添加虚拟类别,并使用图形编辑器手动移动符号,可以解决此问题。我想知道为什么legend(order)选项会以这种方式运行,是否与

我正在尝试使用
twoway
同时绘制两个轴。一个轴使用变量
route
替换常用符号,使用
mlabel
msymbol(none)
。另一个轴在绘图区域中不需要特定标签,但理想情况下应在图例中键入“增量剂量”

使用
图例(订单)
规范创建图例标签时,会出现不希望出现的结果。编码的图例将第二个轴的符号作为第三个顺序图例项。我希望代码将第二个轴的符号作为第五项。通过为未使用的第五条
路线添加虚拟类别,并使用图形编辑器手动移动符号,可以解决此问题。我想知道为什么
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"))

谢谢你提供了一个完整的例子

考虑

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")) 
在上一张图表中

  • cuml_剂量
    是绘制的第一个变量:使用具有多个不同值的标记标签与计数无关。所以,它不对应于0到3。我很惊讶,
    order()
    中允许引用
    0
    。最重要的是,标记标签只是文本,
    graph
    除了按照指示显示文本外,并不关心文本是什么

  • incr\u dose
    是绘制的第二个变量:因此使用
    顺序(2

  • 您可以使用破折号语法任意添加到图例中,如上所述

  • 我看不出在定义图例时使用两个轴是有问题的。我们只是计算在任何y轴上绘制的内容

  • 底线:按语法中提到变量的顺序计算在任何y轴上绘制的内容