【问题标题】:Stata: Order of legend items with multiple axesStata:具有多个轴的图例项目的顺序
【发布时间】:2016-08-03 21:43:29
【问题描述】:

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

使用legend(order) 规范创建图例标签时会出现不希望的结果。编码的图例具有第二个轴的符号作为第三个有序图例项。我希望代码将第二个轴的符号作为第 5 项。可以通过为未使用的第 5 个route 添加虚拟类别并使用图形编辑器手动移动符号来解决此问题。我想知道为什么legend(order) 选项会出现这种行为,是否与mlabelmsymbol(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"))

【问题讨论】:

    标签: graph stata legend-properties multiple-axes


    【解决方案1】:

    感谢您提供的独立示例。

    考虑

    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。最关键的是,标记标签只是文本,graph 不关心文本是什么,只是按照指示显示。

    2. incr_dose 是绘制的第二个变量:因此使用order(2 ... )

    3. 您可以使用破折号语法任意添加到图例,如上。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 2017-10-07
      • 2021-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多