繁体   English   中英

Stata:双向 plot,使用第二轴的坐标将文本添加到第二行

[英]Stata: Two way plot, add text to second line using coordinates of the second axis

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

因为我事先不知道直方图的高度,所以我将 scatteri plot 设置为使用单独的 y 轴,我已将其隐藏。 但是,我似乎无法使用第二个 y 轴坐标向该行添加文本(它而是使用第一个 y 轴坐标,即使它标记的 object 位于第二个 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)作为附加参数添加到文本框中,但显然不允许使用此选项。

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

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

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

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

在此处输入图像描述

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM