如何在Stata的distplot中添加45度线?
如何在Stata的distplot中添加45度线?
我太懂你这种不想手动计算累积分布的心情了——distplot本来就是帮我们省事儿的工具,结果加个参考线还要绕大弯?其实完全不用折腾,用addplot()选项就能直接搞定,根本不用自己手动算ECDF!
给你一步步适配你的数据和需求来操作:
具体操作步骤
先加载数据并获取变量的极值(确保参考线能刚好覆盖整个图的范围):
sysuse auto, clear summarize price, meanonly // 只提取min和max,不做多余计算 local min_price = r(min) local max_price = r(max)直接在
distplot里叠加45度参考线:distplot price, over(foreign) cumulative /// addplot(twoway line (0 1) (`min_price' `max_price'), /// lcolor(black) lpattern(dash) lwidth(medium)) /// title("分国别价格累积分布")
为啥这个方法能行?
cumulative选项是让distplot生成你需要的累积分布(ECDF)图,这是画出目标图的基础;- 虽然
distplot不是twoway类命令,但它支持addplot()参数——这个参数允许我们嵌入twoway的绘图元素,所以用twoway line画的45度线能直接叠在distplot上面; - 我们画的线从(最低价格, 0)连到(最高价格, 1),刚好对应累积分布0到1的概率范围,就是你要的对角线效果。
要是你嫌存局部宏麻烦,也可以直接把summarize的结果嵌进去,一行就能搞定:
sysuse auto, clear summarize price, meanonly distplot price, over(foreign) cumulative addplot(twoway line (0 1) (`r(min)' `r(max)'), lcolor(red) lpattern(dot))
你还能根据自己的喜好调整线的颜色、线型、线宽,比如把lcolor(black)改成lcolor(navy),lpattern(dash)改成lpattern(solid)都完全没问题。
备注:内容来源于stack exchange,提问作者adamsalenushka
相关产品推荐
相关产品推荐

