gpt4 book ai didi

stata - 如何强制 Stata 在图表中的所有其他图上方放置一条水平线?

转载 作者:行者123 更新时间:2023-12-03 23:25:17 28 4
gpt4 key购买 nike

我正在绘制时间序列并根据 Windows 7 上的 Stata 13.1 中的 bool 指标变量对某些时间段进行着色。如果指标变量等于 1,则对时间段进行着色,如果缺少则不着色。我想在 y 轴上时间序列等于 0 的点画一条水平线。这是一个例子,使用 freduse插件( ssc install freduse, replace ):

freduse GDPC1 USRECQ, clear
gen qrtr = qofd(daten)
tsset qrtr, q
drop date*

drop if qrtr < tq(1947q1)
replace USRECQ = . if !USRECQ
label var USRECQ "Recession"

gen ly = log(GDPC1)
tsfilter hp lydev = ly, smooth(1600)

#delimit ;
twoway (scatter USRECQ qrtr,
recast(area)
bcolor(gs13)
cmissing(n)
yaxis(1)
ylabel(0 1)
yscale(off))
(tsline lydev,
yaxis(2)
yscale(alt axis(2))
ytitle("Deviation from trend", axis(2))),
yline(0, axis(2))
;
#delimit cr
ly_dev是时间序列, USRECQ是指示变量。在实践中,指标变量可以是任何东西,这就是为什么我不想硬编码值以在 twoway 中着色。命令,如 this Statalist post 中所示或 nber SSC 中的插件。此代码生成此图:

Incorrect plot

水平线被底纹遮住了,因为底纹是先创建的,但我需要先创建底纹,否则,它会遮住时间序列的图(因为 Stata 不支持透明度/alpha 混合)。

是否可以强制 Stata 将此水平线放置在图中所有其他图的顶部?

最佳答案

是的;这是可以做到的。但你必须施加轻微的力量。

本质上,背后的想法yline()类似的选择是提供引用线,这些线永远不会绘制在数据之上。

所以,要颠覆你必须提供你的线作为数据。一种方法是定义一个常量并将其绘制为 line图形。

下面的技术更通用,不假设添加的线需要是水平的。

首先为方便起见,我们计算线的端点并将它们放在局部宏中。在其他示例中,这可能是可有可无的。

local t1 = tq(1947q1)
local t2 = tq(2014q2)

现在关键是火起来 twoway scatteri但是要将两个点(在这种情况下)重铸为一条线。当我们提供两对坐标时,结果是一条直线(恰好是水平的)。您需要一条与第二个 y 轴上的 0 对应的线:
(scatteri 0 `t1' 0 `t2', recast(line) yaxis(2))  

对于类似的问题,人们应该能够从每种情况下的数据计算适当的坐标,或者依靠绘制为水平线图的常量变量。

编辑:修订版受益于 Roberto Ferrer 的评论。

关于stata - 如何强制 Stata 在图表中的所有其他图上方放置一条水平线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26348614/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com