Bookmark and Share

Notice: On March 31, it was announced that Statalist is moving from an email list to a forum. The old list will shut down on April 23, and its replacement, statalist.org is already up and running.


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: st: appending graphs


From   David Elliott <dcelliott@gmail.com>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: appending graphs
Date   Sun, 27 Jun 2010 10:59:18 -0300

Raymond

What you need to do is accumulate the code for each plot line in a macro:

====begin code====
// number of colors below must be >= max # of subjects
local su_color cranberry navy midgreen dkorange sand teal red ltblue

quietly levelsof school, local(schools) // will contain school "1" "2" "3" ...

foreach sc of local schools {
  quietly levelsof  subject, local(subjects)  // will contain subject
"1" "2" "3" ...
  local gr_code  // reset empty
  foreach su of local subjects {
    // change code depending on whether school and subject variables
are numeric or string
    // note how we get the lines different colors
    local colorstyle : word `su' of `su_color'
    local gr_code tsline mean if school==`sc' & subject==`su' ,
lcolor(`colorstyle') || `gr_code'
    }
  twoway `gr_code' /*, twoway options you want go here*/
}
====end code====

You don't append the graphs, you append the graph code BEFORE the
graph command.  I do this all the time and it works a charm for those
situations where you have variable numbers of plotted lines.  Note how
you can get each subject to always show up with it's own color line -
great for getting consistent legends across graphs.  And speaking of
legends, you can use the same process to accumulate code for a legend
statement.

DC Elliott


On 25 June 2010 16:23, Lim,  Raymond <rl2240@columbia.edu> wrote:
> Hi Statalisters,
> Is there a way to append graphs? I want to automate producing graphs by a categorical variable, with with different number of lines.
> For example, Say you are creating time series graph of GPA by school and by subject (subject 1...20, each school offering a combination of them). Thus for each school, you have a graph with 3 to 5 different lines representing GPA in different subjects across time. The command would be something along the lines of
>
> #delimit ;
> tsset school year;
> twoway (tsline mean if school==1 & subject==7)
>         (tsline mean if school==1 & subject==8)
>         (tsline mean if school==1 & subject==9);
> twoway (tsline mean if school==2 & subject==4)
>         (tsline mean if school==2 & subject==8);
> twoway (tsline mean if school==2 & subject==1)
>         (tsline mean if school==2 & subject==2);
>
> Etc...
>
> I want to write a loop that will add lines to the graph as long as there are subjects that still need to graphed. I was thinking about using a for-loop, but I need to repeat "(tsline mean if school==__ & subject==__)" until all the subjects are accounted for.
>
> Thanks for any input!
> -Raymond
>
> *
> *   For searches and help try:
> *   http://www.stata.com/help.cgi?search
> *   http://www.stata.com/support/statalist/faq
> *   http://www.ats.ucla.edu/stat/stata/
>

*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/


© Copyright 1996–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   Site index