2016-03-31 37 views
1

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

EDIT:

私は今、日陰に識別された各期間に対応する領域をしたいです。

私は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. その青色の背景色のデフォルトのStataスキームs2colorは厄介です。様々な選択肢の中で、異なる方式を使用するのが最も簡単です。

  2. 私はドーピー単位(グラフ上では1.0e + 06のような数字を好む人)と軸のタイトルとラベルを研究しました。 (2000年から2013年とラベル付けされている場合、「年」の説明が必要ですか?)

  3. 凡例を使用して手段を説明することは、唯一の最適な選択肢ではありません。 text()でテキストを追加することをお勧めします。

  4. あなたの期間2004-2007と2007-2012は重複しており、私はあなたが言ったことを意味しなかったと推測しています。そうした場合、コードを変更するのは簡単です。

  5. データが年間合計であるため、棒グラフは、0から始めることを義務づけられた犠牲を払ってアピールすることもできます(これは他の理由で好むかもしれません)。

  6. あなたは、水平線セグメントを持っている場合は、縦の線が冗長に見えるが、あなたが戻ってそれらを配置する方法を知っている

EDIT:新しい質問への回答。

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