# Re: st: changing the legend in twoway function

 From Miranda Kim To statalist@hsphsun2.harvard.edu Subject Re: st: changing the legend in twoway function Date Mon, 10 Aug 2009 15:11:36 +0100

```Thanks a lot!

Maarten buis wrote:
```
```--- On Mon, 10/8/09, Miranda Kim wrote:
```
```Can anyone help me with this?
I am trying to write a program that plots the functions a +
bx + cx2 (on the same graph), where a, b and c are stored
variables. I want to label the legend with the set of values
a, b and c for each graph.
For example if I have:
a   b   c
1   3   4
2   5   8
then I want to have "a=1, b=3, c=4" and "a=2, b=5, c=8"
assigned to the relevant graph in the legend. How can I do
this? Also , how complicated would it be to control the
colours or line types of the graphs?
```
```
Below is how I would do that.
Hope this helps,
Maarten

clear*

inp byte(a   b   c)
1   3   4
2   5   8
end

program define polysameplot, sortpreserve
syntax varlist(min=3 max=3 numeric) [if] [in], ///
[                                              ///
range(numlist min=2 max=2 ascending)           ///
LPattern(string)                               ///
LWidth(string)                                 ///
LColor(string)                                 ///
```
* /// ]
```   // get a, b, and c
tokenize `varlist'
args a b c

// parse lpattern() option
local kp : word count `lpattern'
tokenize `lpattern'
forvalues i = 1/`kp' {
local opt`i' "lpattern(``i'')"
}

// parse lwidth() option
local kw : word count `lwidth'
tokenize `lwidth'
forvalues i = 1/`kw' {
local opt`i' "`opt`i'' lwidth(``i'')"
}

// parse lcolor() option
local kc : word count `lcolor'
tokenize `lcolor'
forvalues i = 1/`kc' {
local opt`i' "`opt`i'' lcolor(``i'')"
}

// finding which obs to loop over
marksample touse
tempvar sort
qui count if `touse'
local k = r(N)

gen byte `sort' = !`touse'
sort `sort'

// parse range() option
if "`range'" == "" {
local range "-5 5"
}

// create the graph command
local j = 1
forvalues i = 1/`k' {
local gr "`gr' function y=`a'[`i']+`b'[`i']*x+`c'[`i']*x^2, range(`range') `opt`i'' ||"
local leg `"`leg' `j' "`a'=`=`a'[`i']', `b'=`=`b'[`i']', `c'=`=`c'[`i']'" "'
local j = `j' + 1
}
local leg `"legend(order(`leg'))"'

```
// graph (the local options collects all the other options // as captured by "*" in -syntax-)
```   twoway `gr', `leg' `options'

end

polysameplot a b c in 1/2, lpattern(dash dot)  ///
lcolor(red blue)    ///
lwidth(vthin thick) ///
range(-4 3)         ///
xline(0)            ///
ytitle("bla")

-----------------------------------------
Maarten L. Buis
Institut fuer Soziologie
Universitaet Tuebingen
Wilhelmstrasse 36
72074 Tuebingen
Germany

http://home.fsw.vu.nl/m.buis/
-----------------------------------------

```
```*
*   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/
```