我想为不同的数据集生成图表,这些数据集具有相同的变量,但年份会发生变化。到目前为止,我可以生成图形,没有图例,这样做:
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"))
有没有办法让这些年份作为循环的一部分出现在图例中?年份和年数从数据集变为数据集,这将有所帮助。
答案 0 :(得分:2)
我的简短回答是我根本不会用循环绘制这样的图形。
这是一种方法:
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"))
答案 1 :(得分:1)
这不是对上述(可能更好)答案的评论,但为了将来参考,您可以使用本地宏做各种奇妙的事情。只需构建一个更新年份(或其他任何东西)的循环,然后将其放入宏中并使用宏作为选项。
以下是我用来在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') )"
}