如何将 factor/group 变量添加到 Stata 中的线图
How to add a factor/group variable to line plot in Stata
我想使用 xtline
绘制连续变量随时间变化的线图,并为每个数据点叠加一个散点图或标签,指示此时的组成员。
* Example generated by -dataex-. To install: ssc install dataex
clear
input double(id year group variable)
101 2003 3 12
102 2003 2 10
102 2005 1 10
102 2007 2 10
102 2009 1 10
102 2011 2 10
103 2003 4 3
103 2005 2 1
104 2003 4 50
105 2003 4 8
105 2005 4 12
105 2007 4 12
105 2009 4 12
106 2003 1 6
106 2005 1 28
106 2007 2 15
106 2009 2 4
106 2011 3 4
106 2015 1 2
106 2017 1 2
end
xtset id year
xtline variable, overlay
这里我added/marked/labelled组id 103.
我有四组,希望能在图例中显示出来
解决方案
preserve
separate variable, by(id) veryshortlabel
line variable101-variable106 year ///
|| scatter variable year, ///
mla(group) ms(none) mlabc(black) ytitle(variable)
restore
或者
xtline variable, overlay addplot(scatter variable year, mlabel(group))
这里推荐直接标注。它可能会产生一个稍微混乱的图表,但你自己的例子已经很混乱了,如果你添加更多的细节只会变得更糟。
这是一个可重现的例子。
webuse grunfeld, clear
set scheme s1color
separate invest, by(company) veryshortlabel
line invest1-invest10 year , ysc(log) ///
|| scatter invest year if year == 1954, ///
mla(company) ms(none) mlabc(black) legend(off) yla(1 10 100 1000, ang(h)) ytitle(investment)
编辑:
在您的示例中,两个标识符仅针对单个年份出现。为了展示使用面板数据绘制线图的一些技术,我将重点放在其他方面。
* Example generated by -dataex-. To install: ssc install dataex
clear
input double(id year group variable)
101 2003 3 12
102 2003 2 10
102 2005 1 10
102 2007 2 10
102 2009 1 10
102 2011 2 10
103 2003 4 3
103 2005 2 1
104 2003 4 50
105 2003 4 8
105 2005 4 12
105 2007 4 12
105 2009 4 12
106 2003 1 6
106 2005 1 28
106 2007 2 15
106 2009 2 4
106 2011 3 4
106 2015 1 2
106 2017 1 2
end
bysort id : gen include = _N > 1
ssc install fabplot
set scheme s1color
fabplot line variable year if include, xla(2003 " 2003" 2010 2017 "2017 ") by(id) frontopts(lw(thick)) xtitle("")
我想使用 xtline
绘制连续变量随时间变化的线图,并为每个数据点叠加一个散点图或标签,指示此时的组成员。
* Example generated by -dataex-. To install: ssc install dataex
clear
input double(id year group variable)
101 2003 3 12
102 2003 2 10
102 2005 1 10
102 2007 2 10
102 2009 1 10
102 2011 2 10
103 2003 4 3
103 2005 2 1
104 2003 4 50
105 2003 4 8
105 2005 4 12
105 2007 4 12
105 2009 4 12
106 2003 1 6
106 2005 1 28
106 2007 2 15
106 2009 2 4
106 2011 3 4
106 2015 1 2
106 2017 1 2
end
xtset id year
xtline variable, overlay
这里我added/marked/labelled组id 103.
我有四组,希望能在图例中显示出来
解决方案
preserve
separate variable, by(id) veryshortlabel
line variable101-variable106 year ///
|| scatter variable year, ///
mla(group) ms(none) mlabc(black) ytitle(variable)
restore
或者
xtline variable, overlay addplot(scatter variable year, mlabel(group))
这里推荐直接标注。它可能会产生一个稍微混乱的图表,但你自己的例子已经很混乱了,如果你添加更多的细节只会变得更糟。
这是一个可重现的例子。
webuse grunfeld, clear
set scheme s1color
separate invest, by(company) veryshortlabel
line invest1-invest10 year , ysc(log) ///
|| scatter invest year if year == 1954, ///
mla(company) ms(none) mlabc(black) legend(off) yla(1 10 100 1000, ang(h)) ytitle(investment)
编辑:
在您的示例中,两个标识符仅针对单个年份出现。为了展示使用面板数据绘制线图的一些技术,我将重点放在其他方面。
* Example generated by -dataex-. To install: ssc install dataex
clear
input double(id year group variable)
101 2003 3 12
102 2003 2 10
102 2005 1 10
102 2007 2 10
102 2009 1 10
102 2011 2 10
103 2003 4 3
103 2005 2 1
104 2003 4 50
105 2003 4 8
105 2005 4 12
105 2007 4 12
105 2009 4 12
106 2003 1 6
106 2005 1 28
106 2007 2 15
106 2009 2 4
106 2011 3 4
106 2015 1 2
106 2017 1 2
end
bysort id : gen include = _N > 1
ssc install fabplot
set scheme s1color
fabplot line variable year if include, xla(2003 " 2003" 2010 2017 "2017 ") by(id) frontopts(lw(thick)) xtitle("")