Linjediagram

Av Anders Sundell

Linjediagram används för att visa olika nivåer av en variabel när de olika värdena som ska visas hänger ihop. Till exempel förändring i ett land över tid. Linjediagram är lätta att förstå och kräver oftast ingen närmare förklaring, vilket gör dem attraktiva ur pedagogisk synpunkt.

Vi ska göra ett diagram med hjälp av QoG basic time series data. Den innehåller information om världens länder, över tid. Analysenheten är alltså landår. Varje land har en analysenhet för varje år.

In [1]:
use "https://www.qogdata.pol.gu.se/dataarchive/qog_bas_ts_jan18.dta"
(Quality of Government Basic dataset 2018 - Time-Series)

Vi ska göra ett diagram som visar utvecklingen av BNP per capita i Sverige, med hjälp av twoway-kommandot. BNP-variabeln vi ska använda heter gle_rgdpc.

Viktigt att tänka på är att ett linjediagram bara kan visa en datapunkt per tidsenhet på ett bra sätt. Vi kommer därför behöva filtrera ut alla observationer som inte är Sverige. Men det kan vi göra direkt i kommandot, med hjälp av if-satser.

Principen för linjekommandot är att vi skriver twoway och lägger sedan linjediagrammet i ett eget lager, avgränsat med parenteser. Där börjar vi med line och sedan variabeln som ska vara på y-axeln gle_rgdpc och sedan variabeln som ska vara på x-axeln, year. Därefter kommer if-satsen if cname=="Sweden" som anger att bara analysenheter som uppfyller villkoret att variabeln cname ska vara "Sweden" får vara med, och sedan är parentesen slut.

In [5]:
twoway (line gle_rgdpc year if cname=="Sweden")
.     noi gr export /Users/xsunde/.stata_kernel_cache/graph$stata_kernel_graph_
> counter.svg, width(600) replace
.     global stata_kernel_graph_counter = $stata_kernel_graph_counter + 1
. }            

Prydligt! Vi ser att BNP per capita har ökat över tid i Sverige, med vissa dippar, som krisen på 1990-talet och finanskrisen 2009.

Ett vanligt fel: Observationerna är i fel ordning

Ibland när man gör ett linjediagram kan det dock se ut som nedan:

In [7]:
twoway (line gle_rgdpc year if cname=="Sweden")
.     noi gr export /Users/xsunde/.stata_kernel_cache/graph$stata_kernel_graph_
> counter.svg, width(600) replace
.     global stata_kernel_graph_counter = $stata_kernel_graph_counter + 1
. }            

Det som hänt här är att analysenheterna - raderna - i datasetet har hamnat i fel ordning. Stata drar ut linjen i ordning, uppifrån och ner. Därför behöver vi sortera så att analysenheterna hamnar i rätt ordning, dvs i storleksordning så att den minsta observationen på x-axeln kommer först. Vi kan därför skriva gsort cname year för att sortera alla observationerna först efter vilket land de tillhör, och sedan efter år. Gör man sedan om diagrammet kommer det att se bra ut.

In [9]:
gsort cname year

Lägga till fler linjer

Ofta vill man jämföra flera tidsserier i ett linjediagram. Det kan vi göra genom att lägga till fler lager i twoway-kommandot, med separata villkort. I diagrammet nedan lägger vi till en linje för Danmark - vi kopierar bara parentesen, ändrar landet i villkoret, och lägger sedan till en option i varje parentes som anger linjens färg, blå för Sverige, röd för Danmark. Det finns andra options som styr linjens utseende, till exempel lpattern() och lwidth() men här håller vi det enkelt. Se help twoway line för en fullständig förteckning.

In [11]:
twoway (line gle_rgdpc year if cname=="Sweden", lcolor(blue)) (line gle_rgdpc year if cname=="Denmark", lcolor(red))
. cap noi twoway (line gle_rgdpc year if cname=="Sweden", lcolor(blue)) (line g
> le_rgdpc year if cname=="Denmark", lcolor(red))

. if _rc == 0 {
.     noi gr export /Users/xsunde/.stata_kernel_cache/graph$stata_kernel_graph_
> counter.svg, width(600) replace
.     global stata_kernel_graph_counter = $stata_kernel_graph_counter + 1
. }            

Lägga till referenslinjer

Slutligen kan det ibland vara önskvärt att markera några speciella värden på x- eller y-axeln. Det kan man göra med några options yline och xline, som kan användas i alla twoway-grafer.

Här behöver man dock tänka på att de inte ska vara inne i parenteserna, utan de är options som gäller för grafen som helhet.

Först lägger vi till linjer som visar två viktiga kriser i svensk ekonomi, när den fasta kronkursen övergavs 1992 och finanskrisen 2009, med option xline.

In [14]:
twoway (line gle_rgdpc year if cname=="Sweden", lcolor(blue)), xline(1992 2009)
. cap noi twoway (line gle_rgdpc year if cname=="Sweden", lcolor(blue)), xline(
> 1992 2009)

. if _rc == 0 {
.     noi gr export /Users/xsunde/.stata_kernel_cache/graph$stata_kernel_graph_
> counter.svg, width(600) replace
.     global stata_kernel_graph_counter = $stata_kernel_graph_counter + 1
. }            

Sedan provar vi att istället lägga till en linje som markerar 20000 dollar i BNP per capita, med option yline. Man kan med hjälp av options inom yline-parentesen också ändra utseendet på den linjen, men det är inget vi gör nu.

In [15]:
twoway (line gle_rgdpc year if cname=="Sweden", lcolor(blue)), yline(20000)
. cap noi twoway (line gle_rgdpc year if cname=="Sweden", lcolor(blue)), yline(
> 20000)

. if _rc == 0 {
.     noi gr export /Users/xsunde/.stata_kernel_cache/graph$stata_kernel_graph_
> counter.svg, width(600) replace
.     global stata_kernel_graph_counter = $stata_kernel_graph_counter + 1
. }            

Avslutning

Linjediagram är enkla och pedagogiska om man vill visa hur en enhet förändrats över tid. Men för att det ska funka behöver det bara finnas ett värde per tidsenhet, så det behöver man antingen fixa i datan först, eller direkt i grafkommandot, med hjälp av if-satser.

Man kan naturligtvis visa flera linjer i samma graf, men då behöver de vara separata lager (dvs olika parenteser i twoway).