【发布时间】: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 轴会出现省略号 (...)。我想删除这个。