【问题标题】:Stata: Two way plot, add text to second line using coordinates of the second axisStata:双向绘图,使用第二个轴的坐标将文本添加到第二行
【发布时间】:2022-09-27 15:35:41
【问题描述】:

我有一个直方图,我想在其中添加中位数。我不能使用 xline() 因为这条线落在直方图的后面,而不是在它上面。为了解决这个问题,我使用 scatteri 和坐标。

因为我事先不知道直方图的高度,所以我将散点图设置为使用单独的 y 轴,我已将其隐藏。但是,我似乎无法在这一行添加文本使用第二个 y 轴坐标(它改为使用第一个 y 轴坐标,即使它标记的对象位于第二个 y 轴上)。这是我的问题的一个例子:

sysuse auto

sum mpg, d
local median = r(p50)
twoway hist mpg, start(10) width(5) || ///
    scatteri 0 `median\' 1 `median\', recast(line) yaxis(2) ///
    ylabel(none, axis(2)) ytitle(\"\", axis(2)) lc(red) ///
    text(0.08 `median\' `\"median = $`=string(`median\',\"%6.2f\")\'\"\', ///
        color(red) placement(se)) ///
    legend(off)

这会产生所需的图表(大部分*):

问题是我事先不知道直方图的高度。这就是我首先使用第二个 y 轴的原因。而不是 \"0.08\" 让我的文本进入正确的位置,我想使用 \"1\",因为这是第二个 y 轴的最大值。相应的行将改为:

text(1 `median\' `\"median = $`=string(`median\',\"%6.2f\")\'\"\', ///
    color(red) placement(se)) ///

当然,我可以手动确定直方图的这个值(就像我在这个例子中所做的那样),但我计划通过一个循环创建一组这些图,这样就有十几个面板。使用第二个 y 轴网格点将文本附加到线条上似乎更好。

我尝试将axis(2) 作为附加参数添加到文本框中,但显然不允许使用此选项。

*第二个小问题是,当我添加散点图时,我不明白为什么 x 轴会出现省略号 (...)。我想删除这个。

    标签: histogram stata yaxis


    【解决方案1】:

    完全按照你的做法去做是很尴尬的,因为你需要两次通过,一次是为了找出密度有多高,另一次是按照你的意愿绘制图形。

    我倾向于使用透明条和自定义轴标签来显示相同​​的信息。在此示例中,幸运的是中位数与条形边缘重合,这对于您的真实数据来说可能不是不可能的。无论如何,我改变了酒吧的设置。

    sysuse auto, clear
    su mpg, detail
    blcolor(black) xline(20) xaxis(1 2) xla(20 "median 20", axis(2))
    

    当然,您可以删除或以其他方式更改出现在顶部的轴标题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多