2016-03-31 3 views
1

Ich möchte ein Zeitreihendiagramm zeichnen, das Referenzlinien für beide X & Y-Achsen angibt. Ich könnte das Diagramm erhalten, das nur die Referenzlinien für die Zeitachse (X) zeigt (wie in der folgenden Grafik gezeigt).Referenzlinien in Zeitreihendiagrammen

Der Befehl, den ich verwenden twoway (tsline egg_prod), tline(2004 2007 2012)

Jetzt habe ich die Mittellinien für jedes Segment zeigen will. d. h. die durchschnittliche Eierproduktion innerhalb von 2004-2007 & 2008-2012.

Ich poste einen minimalen Datensatz für Ihre Referenz. Es folgt der Code, den ich mit dateex verwendet habe.

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 

Kann jemand vorschlagen, wie ich folgen sollte?

enter image description here

EDIT:

Ich will jetzt Schatten auf den Bereich jeder identifizierten Zeitperiode entspricht.

Ich versuchte die recast(area) Option, aber stieß auf einige Probleme.

1) Ich möchte, dass der schattierte Bereich die oberen & unteren Ränder des Diagramms berührt. Ich konnte keinen Weg dafür finden.

2) Ich möchte keine Legende für schattierte Bereiche sehen. Also habe ich legend(off) verwendet, aber das bedeutet, dass die Legende zu den Mittelwerten auch weggelassen wird. Könnten Sie bitte einen Weg vorschlagen, wie Sie diese Probleme lösen können?

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

Antwort

4

Der wichtigste Trick hier verwendet wird, ist jedes Liniensegment hinzuzufügen, die durch Auftragen zwei Paare von Punkten und dann twoway scatteri und recast(line) mit Beitritt. Sie müssen natürlich zuerst die Mittel berechnen.

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

Kleine Punkte:

  1. Das Schema Stata Standard s2color mit seinem blauen Hintergrund ist umständlich, wenn Sie es für alle Ihre Grafiken benutzen. Von verschiedenen Alternativen ist die Verwendung eines anderen Schemas am einfachsten.

  2. Ich habe an den doofen Maßeinheiten gearbeitet (wer sieht lieber Zahlen wie 1.0e + 06 auf Graphen?) Und die Achsentitel und Beschriftungen. (Wer braucht die Erklärung "Jahr", wenn es von 2000 bis 2013 gekennzeichnet ist?)

  3. Mit einer Legende zu erklären, die Mittel sind weit von der einzigen oder sogar die beste Option. Vielleicht bevorzugen Sie das Hinzufügen von Text mit text().

  4. Ihre Zeiträume 2004-2007 und 2007-2012 überschneiden sich und ich nehme an, Sie meinten nicht, was Sie sagten. Wenn Sie das getan haben, ist es einfach, den Code zu ändern.

  5. Da es sich bei den Daten um Jahresgesamtwerte handelt, könnte ein Balkendiagramm auch attraktiv erscheinen, allerdings auf Kosten der Verpflichtung, bei Null zu beginnen (was Sie aus anderen Gründen bevorzugen könnten).

  6. Wenn Sie die horizontalen Liniensegmente haben, scheinen die vertikalen Linien überflüssig, aber sie wissen, wie sie setzen zurück in

EDIT:. Antwort auf neue Fragen auf.

Verwenden Sie plotregion(margin(zero)), um darauf zu bestehen, dass der schattierte Bereich sich durch das gesamte plotregion erstreckt.

Die legend() sollte on sein, aber Sie wählen nur aus, welche Elemente angezeigt werden sollen, die jetzt # 4 und # 5 sind. Sie möchten nun die Legende verschieben.

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