我想绘制一个时间序列图,指定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
有人可以建议我应该遵循的方式吗?
编辑:
我现在想要对每个确定的时间段对应的区域进行着色。
我尝试了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))
答案 0 :(得分:4)
此处使用的主要技巧是通过绘制两对点来添加每个线段,然后使用twoway scatteri
和recast(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))
小点:
默认的Stata方案s2color
及其蓝色背景很尴尬,除非您将它用于所有图形。在各种替代方案中,使用不同的方案是最简单的。
我曾经研究过多种测量单位(谁更喜欢在图表上看到像1.0e + 06这样的数字?)以及轴标题和标签。 (当标记为2000年至2013年时,谁需要解释“年份”?)
使用图例来解释手段远非唯一甚至是最佳选择。您可能更喜欢使用text()
添加文字。
2004-2007和2007-2012期间重叠,我假设你并不是说你所说的。如果你这样做,改变代码很容易。
由于数据是年度总数,条形图也可能具有吸引力,代价是必须从零开始(您可能更喜欢其他理由)。
如果您有水平线段,垂直线似乎是多余的,但您知道如何将它们放回去。
编辑:回答新问题。
使用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))