Plot 时间序列图中的参考线

Plot 时间序列图中的参考线,plot,stata,Plot,Stata,我想绘制一个时间序列图,指定X轴和Y轴的参考线。我可以得到显示时间X轴参考线的图,如下图所示 我使用的命令是双向tsline egg_prod,tline2004 2007 2012 现在我想显示每个线段的平均线。i、 e.2004-2007年和2008-2012年的平均产蛋量 我正在发布一个最小数据集供您参考。下面是我与dataex一起使用的代码 clear input int year long egg_production 2000 918000 2001 941000 2

我想绘制一个时间序列图,指定X轴和Y轴的参考线。我可以得到显示时间X轴参考线的图,如下图所示

我使用的命令是双向tsline egg_prod,tline2004 2007 2012

现在我想显示每个线段的平均线。i、 e.2004-2007年和2008-2012年的平均产蛋量

我正在发布一个最小数据集供您参考。下面是我与dataex一起使用的代码

clear  
input int year long egg_production  
2000 918000  
2001 941000  
2002 886000  
2003 885012  
2004 874596  
2005 864552  
2006 901176  
2007 915600  
2008 1.0e+06   
2009 1.1e+06  
2010 1.1e+06  
2011 1.2e+06  
2012 1.2e+06  
2013 1.9e+06  
end
有人能建议我该怎么做吗

编辑:

现在,我想对每个确定的时间段对应的区域进行着色

我尝试了recastarea选项,但遇到了一些问题

1我希望阴影区域接触绘图的上下边缘。我找不到办法

2我不想看到阴影区域的图例。所以我使用了legendoff,但这意味着与平均值相关的图例也被省略了。你能提出一个解决这些问题的方法吗

graph twoway scatteri 2 2004 2 2007, recast(area) fcolor(gs14) lcolor(maroon) legend(off) /// 
|| scatteri 2 2008 2 2012, recast(area) fcolor(gs14) lcolor(maroon) legend(off) /// 
|| connected egg year, tline(2004 2007 2008 2012) /// 
|| scatteri `mean1' 2004 `mean1' 2007, recast(line) /// 
|| scatteri `mean2' 2008 `mean2' 2012, recast(line) /// 
ytitle(Egg production (millions)) xtitle("") xla(2000(5)2010 2013) xtic(2001/2012) /// 
scheme(s2color) yla(, ang(h)) /// 
legend(order(2 "2004-07 mean `text1' m" 3 "2008-12 mean `text2' m") pos(11) ring(0) col(1))

这里使用的主要技巧是通过绘制两对点来添加每个线段,然后使用双向散射和重铸线将它们连接起来。你自然需要先计算平均数

clear 
input int year long egg_production 
2000 918000 
2001 941000 
2002 886000 
2003 885012 
2004 874596 
2005 864552 
2006 901176 
2007 915600 
2008 1.0e+06 
2009 1.1e+06 
2010 1.1e+06 
2011 1.2e+06 
2012 1.2e+06 
2013 1.9e+06 
end

replace egg_production = egg_p/1e6 

su egg if inrange(year, 2004, 2007), meanonly 
local mean1 = r(mean) 
local text1 : di %3.2f `mean1' 
su egg if inrange(year, 2008, 2012), meanonly 
local mean2 = r(mean) 
local text2 : di %3.2f `mean2'

twoway connected egg year ///
|| scatteri `mean1' 2004 `mean1' 2007, recast(line) /// 
|| scatteri `mean2' 2008 `mean2' 2012, recast(line) /// 
ytitle(Egg production (millions)) xtitle("") xla(2000(5)2010 2013) xtic(2001/2012) ///
scheme(s1color) yla(, ang(h)) ///
legend(order(2 "2004-07 mean `text1' m" 3 "2008-12 mean `text2' m") pos(11) ring(0) col(1)) 
小问题:

除非在所有图形中都使用默认的Stata方案,否则蓝色背景的Stata方案是不合适的。在各种备选方案中,使用不同的方案是最简单的

我研究过愚蠢的计量单位,谁更喜欢在图表上看到像1.0e+06这样的数字?以及轴标题和标签。谁需要2000年到2013年的解释

用图例来解释方法远非唯一甚至最好的选择。您可能更喜欢在文本中添加文本

你的2004-2007年和2007-2012年的时间段重叠,我想你说的不是真的。如果您这样做了,那么更改代码就很容易了

由于数据是年度总数,条形图也可能具有吸引力,但代价是必须从零开始,而你可能会出于其他原因选择从零开始

如果有水平线段,垂直线段看起来是多余的,但您知道如何将它们放回

编辑:回答新问题

使用plotregionmarginzero坚持着色区域延伸到整个plotregion

图例应该打开,但您只需选择要显示的元素,即现在的4和5。现在可能需要移动图例

graph twoway scatteri 2 2004 2 2007, recast(area) fcolor(gs14) lcolor(maroon) /// 
|| scatteri 2 2008 2 2012, recast(area) fcolor(gs14) lcolor(maroon) /// 
|| connected egg year, tline(2004 2007 2008 2012) /// 
|| scatteri `mean1' 2004 `mean1' 2007, recast(line) /// 
|| scatteri `mean2' 2008 `mean2' 2012, recast(line) /// 
ytitle(Egg production (millions)) xtitle("") xla(2000(5)2010 2013) xtic(2001/2012) /// 
scheme(s2color) yla(, ang(h)) plotregion(margin(zero)) /// 
legend(order(4 "2004-07 mean `text1' m" 5 "2008-12 mean `text2' m") pos(11) ring(0) col(1))

这里使用的主要技巧是通过绘制两对点来添加每个线段,然后使用双向散射和重铸线将它们连接起来。你自然需要先计算平均数

clear 
input int year long egg_production 
2000 918000 
2001 941000 
2002 886000 
2003 885012 
2004 874596 
2005 864552 
2006 901176 
2007 915600 
2008 1.0e+06 
2009 1.1e+06 
2010 1.1e+06 
2011 1.2e+06 
2012 1.2e+06 
2013 1.9e+06 
end

replace egg_production = egg_p/1e6 

su egg if inrange(year, 2004, 2007), meanonly 
local mean1 = r(mean) 
local text1 : di %3.2f `mean1' 
su egg if inrange(year, 2008, 2012), meanonly 
local mean2 = r(mean) 
local text2 : di %3.2f `mean2'

twoway connected egg year ///
|| scatteri `mean1' 2004 `mean1' 2007, recast(line) /// 
|| scatteri `mean2' 2008 `mean2' 2012, recast(line) /// 
ytitle(Egg production (millions)) xtitle("") xla(2000(5)2010 2013) xtic(2001/2012) ///
scheme(s1color) yla(, ang(h)) ///
legend(order(2 "2004-07 mean `text1' m" 3 "2008-12 mean `text2' m") pos(11) ring(0) col(1)) 
小问题:

除非在所有图形中都使用默认的Stata方案,否则蓝色背景的Stata方案是不合适的。在各种备选方案中,使用不同的方案是最简单的

我研究过愚蠢的计量单位,谁更喜欢在图表上看到像1.0e+06这样的数字?以及轴标题和标签。谁需要2000年到2013年的解释

用图例来解释方法远非唯一甚至最好的选择。您可能更喜欢在文本中添加文本

你的2004-2007年和2007-2012年的时间段重叠,我想你说的不是真的。如果您这样做了,那么更改代码就很容易了

由于数据是年度总数,条形图也可能具有吸引力,但代价是必须从零开始,而你可能会出于其他原因选择从零开始

如果有水平线段,垂直线段看起来是多余的,但您知道如何将它们放回

编辑:回答新问题

使用plotregionmarginzero坚持着色区域延伸到整个plotregion

图例应该打开,但您只需选择要显示的元素,即现在的4和5。现在可能需要移动图例

graph twoway scatteri 2 2004 2 2007, recast(area) fcolor(gs14) lcolor(maroon) /// 
|| scatteri 2 2008 2 2012, recast(area) fcolor(gs14) lcolor(maroon) /// 
|| connected egg year, tline(2004 2007 2008 2012) /// 
|| scatteri `mean1' 2004 `mean1' 2007, recast(line) /// 
|| scatteri `mean2' 2008 `mean2' 2012, recast(line) /// 
ytitle(Egg production (millions)) xtitle("") xla(2000(5)2010 2013) xtic(2001/2012) /// 
scheme(s2color) yla(, ang(h)) plotregion(margin(zero)) /// 
legend(order(4 "2004-07 mean `text1' m" 5 "2008-12 mean `text2' m") pos(11) ring(0) col(1))