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

标签 stata graphing

我正在绘制时间序列并根据 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/

相关文章:

stata - stata中的##是什么意思?

stata - 如何用逗号分隔 Stata 宏 `varlist' 以便在 mi( ) 和 inlist( ) 中使用?

silverlight - 我将如何在 Silverlight/WP7 中实现实时绘图?

math - 在 MATLAB 中将 errorbar() 与 semilogy() 一起使用?

graphing - RRDtool 多个 RRA 有什么用?

python - 无法在 matplotlib 图中出现次要网格线

stata - 为什么 coefplot 不绘制 Stata 中所有级别的交互?

stata - Stata 中的非线性最小二乘法,如何对变量/集的求和进行建模?

stata - 是否可以在Stata中获得文件修改时间?

graph - GNUplot 中的平均线