,

Stacked graphs in Stata

For plotting the relative importance of (e.g.) input shares, it can be useful to stack them in a figure. In my specific problem, I wanted to show the development of low-, medium-, and high-skilled labour inputs, relative to all labour inputs over time. Since the three shares obviously sum up to 1, I wanted to have a figure like this:

In order to get a figures like this, follow these steps:
1) generate three variables (here: ls, ms, hs) which sum up to one. You need to sum up the shares so that: ls=ls; ms=ls+ms; hs=ls+ms+hs=1

2) Use the following code in Stata

twoway (area hs year, color(gs13)) (area ms year, color(gs9)) (area ls year, color(gs4)), xlabel(1970 (5) 2005, alternate) ylabel(0 (25) 100, alternate nogrid val) xtitle("") text(10 1980 "{bf:low-skilled}") text(50 1990 "{bf:medium-skilled}") text(90 1995 "{bf:high-skilled}") by(industry, legend(off))

The stacked graph is essentially an overlay of three separate layers of the figure (one for each input). Worth mentioning is the following command: text(10 1980  "{bf:low-skilled}") which puts text into the figure.

Tags:

Responses to “Stacked graphs in Stata”

  1. jc

    This doesn’t quite work the way it is described. If I have three variables that sum to 1 (like market shares .6,.3,.1), then all the shares are graphed from the zero, rather than being stacked on top of each other.

  2. Jan Sauermann

    Could you please post the syntax you are using? Are the area-commands sorted from highest market share to lowest market share?

  3. jc

    Yes they are sorted in that way. What I have to do is create new variables in this way

    gen x1 = share1
    gen x2 = share2+x1
    gen x3 = share3+x3

    Then I can create the area graphs using the temporary variables x1,x2, and x3. It will look as it does in your example. Without this intermediate step, they just overlap on each other rather than stacking. If you have found a way to get them to stack without this intermediate step, I would love to hear how you do it.

  4. Jan Sauermann

    Yes, indeed. I did not mention this in the text above but just updated it.

  5. ingorohlfing

    I think using area three times does not work because the three areas are overlaid. One can use area for the first, bottom area, but the others should be (rarea x1 x2 year) and (rarea x2 x3 year).

  6. Giuliana Giuliani

    HHi, it works all good for me (when listing the variables from the smallest to the biggest) but I have another question: how to display blank space when data is missing? cmiss(n) seems not to work with area charts…Thanks a lot!

  7. Jan Sauermann

    I guess one option could be to define missing observations as a separate group, habe you tried that?

Leave a Reply