2016-03-31 23 views
1

我想绘制一个时间序列图,指定两个X轴的参考线,分别为X & Y轴。我可以只显示时间(X)轴的参考线(如下图所示)。时间序列图中的参考线

我用的命令是twoway (tsline egg_prod), tline(2004 2007 2012)

现在我想展示的平均线各段。即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 

有人可以建议我应该遵循的方式吗?

enter image description here

编辑:

我现在想树荫对应于每个标识的时间段的区域。

我试过recast(area)选项,但遇到一些问题。

1)我想要阴影区域触摸阴谋的顶部边缘&。我无法找到一个方法。

2)我不想看到阴影区域的图例。所以我使用了legend(off),但这意味着与平均值相关的图例也被省略了。你能否建议一种方法来找出这些问题?

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)) 

回答

4

这里使用的主要诀窍是通过绘制两对点,然后使用twoway scatterirecast(line)连接它们添加的每个线段。你自然需要先计算手段。

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)) 

enter image description here

小点:除非您使用它的所有图形

  1. 默认塔塔计划s2color其蓝色的背景是尴尬。各种替代方案中,使用不同的方案是最简单的。

  2. 我测量的迟钝单位(谁喜欢看像1.0E + 06的图形?号)和轴标题和标签的工作。 (2000年到2013年,谁需要解释“年份”?)

  3. 使用图例来解释手段远不是唯一甚至最好的选择。您可能更愿意使用text()添加文本。

  4. 你的月经2004-2007和2007-2012重叠,我假设你没有说你说的话。如果你这样做,更改代码很简单。由于数据是年度总数,因此条形图可能也会有吸引力,代价是不得不从零开始(您可能更喜欢其他理由)。

  5. 如果你有水平线段,垂直线似乎是多余的,但你知道如何将它们放回

编辑:应对新的问题。

使用plotregion(margin(zero))坚持阴影区域贯穿整个plotregion

legend()应该是on但您只需选择要显示哪些元素,现在是#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))