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