在 Stata 循环内创建图形图例
Create graph legend inside loop in Stata
我想为不同的数据集生成图表,具有相同的变量,但年份会发生变化。到目前为止,我可以生成没有图例的图表,这样做:
levelsof year, local(lyear)
foreach l of local lyear {
local fig `fig' scatter mpg time if year==`l', connect(l) ||
}
graph twoway `fig'
我想添加一个每年显示的图例。例如,如果没有循环,我会添加选项:
graph twoway `fig', legend(lab(1 "2010") lab(2 "2011") lab(3 "2012"))
有没有办法让年份作为循环的一部分出现在图例中?年份和年数随数据集的不同而变化,这会很有帮助。
我的简短回答是,我根本不会画这样一个带有循环的图。
这是一种方法:
separate mpg, by(year) veryshortlabel
twoway connected `r(varlist)' time, sort
这是另一种方法:
ssc inst sepscatter
sepscatter mpg time, sep(year) recast(connected) sort
您只需安装 sepscatter
一次。
详情:这个
legend(lab(1 "2010") lab(2 "2011") lab(3 "2012"))
比
更容易
legend(order(1 "2010" 2 "2011" 3 "2012"))
这不是对上面(可能更好)答案的评论,但为了将来参考,您可以使用本地宏做各种奇妙的事情。只需构建一个更新年份(或其他任何内容)的循环,然后将其放入宏中并将宏用于选项。
这是我用来在 Stata 中生成地毯图的 example 的片段。
foreach llevel of local llevels {
local pposition: list posof "`llevel'" in llevels
local rposition = `ssize'-`pposition'+1
local iintensity=1-(0.7*((`rposition')/`maxlevels'))
local rrug "`rrug' (scatter rugzero `rugvar'"
local rrug "`rrug' if `rugvar'_pickone &"
local rrug "`rrug' `rugvar'_cat==`llevel' & `my_touse',"
local rrug "`rrug' xaxis(`axis') msymbol(none) mlab(ruglabel)"
local rrug "`rrug' mlabcolor(*`iintensity')"
local rrug "`rrug' mlabposition(`clock') )"
}
我想为不同的数据集生成图表,具有相同的变量,但年份会发生变化。到目前为止,我可以生成没有图例的图表,这样做:
levelsof year, local(lyear)
foreach l of local lyear {
local fig `fig' scatter mpg time if year==`l', connect(l) ||
}
graph twoway `fig'
我想添加一个每年显示的图例。例如,如果没有循环,我会添加选项:
graph twoway `fig', legend(lab(1 "2010") lab(2 "2011") lab(3 "2012"))
有没有办法让年份作为循环的一部分出现在图例中?年份和年数随数据集的不同而变化,这会很有帮助。
我的简短回答是,我根本不会画这样一个带有循环的图。
这是一种方法:
separate mpg, by(year) veryshortlabel
twoway connected `r(varlist)' time, sort
这是另一种方法:
ssc inst sepscatter
sepscatter mpg time, sep(year) recast(connected) sort
您只需安装 sepscatter
一次。
详情:这个
legend(lab(1 "2010") lab(2 "2011") lab(3 "2012"))
比
更容易legend(order(1 "2010" 2 "2011" 3 "2012"))
这不是对上面(可能更好)答案的评论,但为了将来参考,您可以使用本地宏做各种奇妙的事情。只需构建一个更新年份(或其他任何内容)的循环,然后将其放入宏中并将宏用于选项。
这是我用来在 Stata 中生成地毯图的 example 的片段。
foreach llevel of local llevels {
local pposition: list posof "`llevel'" in llevels
local rposition = `ssize'-`pposition'+1
local iintensity=1-(0.7*((`rposition')/`maxlevels'))
local rrug "`rrug' (scatter rugzero `rugvar'"
local rrug "`rrug' if `rugvar'_pickone &"
local rrug "`rrug' `rugvar'_cat==`llevel' & `my_touse',"
local rrug "`rrug' xaxis(`axis') msymbol(none) mlab(ruglabel)"
local rrug "`rrug' mlabcolor(*`iintensity')"
local rrug "`rrug' mlabposition(`clock') )"
}