本节书摘来自华章出版社《Stata统计分析与应用(第2版)》一书中的第3章,第3.2节,作者 周广肃,更多章节内容可以访问云栖社区“华章计算机”公众号查看
3.2 直方图、散点图和曲线标绘图的绘制
直方图、散点图与曲线标绘图是较为常用的三种统计图形,常用来表示数据的分布和变化趋势,本节将会通过例子介绍三种图形的基本绘制方法。
3.2.1 直方图的绘制
直方图是用矩形的面积(即长度和宽度)来表示频数分布的图形,在平面直角坐标系中,一般用纵轴表示频数或频率,用横轴表示数据的分组。通过该种图形,用户可以较为直观地了解数据的整体情况,如分布类型、中心位置、分散程度等。
在Stata中绘制直方图的最基本命令语句为:
histogram varname [if] [in] [weight] [, [continuous_opts | discrete_opts]
options]
varname是将要绘制图形的变量,if是条件语句,in是范围语句,weight是权重语句。下面将要着重介绍的是 histogram的选项,如表3.2所示。
例如,利用usaauto文件,绘制一个关于mpg变量的最为基本的直方图。此数据是根据统计资料得到的美国汽车产业的横截面数据(1978年),完整的数据位于本书附带光盘data第3章usaauto.dta工作文件中。
输入命令:
histogram mpg
这个命令语句只告诉Stata为变量mpg绘制直方图的基本命令,而不进行任何设定,这时Stata将绘制出如图3.4所示的直方图。
但是这个图形过于简单和粗糙,我们可以对图形进行以下优化设置:
为图形添加标题“mpg直方图”。
把直方条的数目由现在的8个增加到10个。
增加脚注“数据来源于美国汽车协会”。
横轴刻度范围为从10~45,刻度单位为5,名称为“每加仑油行使英里数/单位:英里”。
为图形添加一条正态曲线。
标注直方条的高度。
完成以上设置,可重新输入绘制图形的如下命令:
histogram mpg, title(mpg直方图) bin(10) note(数据来源于美国汽车协会)
xtick(10(5)45) xtitle(每加仑油行使英里数/单位:英里) norm addlabels
在上述命令语句中,“title(mpg直方图)”的作用是对图形添加标题;“bin(10)”的作用是设置直方条数目为10;“note(数据来源于美国汽车协会)”用于设定脚注的内容;“xtick(10(5)45)”用于设定横轴刻度起始值为10,终止值是45,间隔是5;“xtitle(每加仑油行使英里数/单位:英里)”部分完成了横轴标题的设定;“norm”表示进行正态曲线的绘制,“addlabels”可标注直方条的高度。命令执行的结果显示在图3.5中。
如果将国产车与进口车的图形分开展示,并作对比,可以在以上命令之后再添加如下命令语句:
by (foreign)
所以,这时需要输入的完整命令语句为:
histogram mpg, title(mpg直方图) bin(10) note(数据来源于美国汽车协会)
xtick(10(5)45) xtitle(每加仑油行使英里数/单位:英里) norm addlabels by (foreign)
可以看到如图3.6所示的结果,这时图形按照分类变量foreign对数据分别绘制直方图进行显示,方便用户的对比分析。
3.2.2 散点图的绘制
散点图是双向关系图的一种,常用来反映两个或多个变量之间的关系。散点图中通常用纵轴来表示因变量,用横轴来表示自变量,用图形来反映纵轴的数值是否随横轴数值的变化而变化。
绘制散点图的最基本命令语句为:
[twoway] scatter varlist [if] [in] [weight] [, options]
[twoway] scatter表示绘制散点图,varlist是将要绘制图形的变量,注意x变量要放置在y变量之后,if是条件语句,in是范围语句,weight是权重语句。需要注意的是,散点图特有的数据标记设定和组群划分选项。
- 数据标记的设定
数据标记的设定包括数据标记形状的设定、颜色的设定、大小的设定、散点标签的设定4个部分。
(1)数据标记形状的设定
数据标记形状的设定,是通过msymbol()命令选项来进行的,在括号中输入所需要的形状代号即可。形状命令代号参见表3.3。
(2)数据标记颜色的设定
数据标记颜色的设定,是通过mcolor()命令选项实现的,将所需要的颜色名称输入括号中即可。例如设定标记的颜色为红色,可使用如下命令:
mcolor(red)
(3)数据标记大小的设定
数据标记大小的设定,通过msize()命令选项,将适当大小的数字输入括号中即可。例如设定标记的大小为5号,使用命令:
msize (5)
(4)散点标签的设定
散点标签的设定,通过mlabel()和mlabposition()命令选项,将标签的内容输入mlabel后的括号,将代表位置的数字输入mlabposition后面的括号即可。例如设定散点的内容为变量city,位置在3点钟处,可使用如下命令:
mlabel (city) mlabposition(3)
- 群组划分选项
如果在数据中存在分类变量,可以将数据分类以后再绘制散点图,所使用的命令为by(),括号中需要填入分类变量。例如,按照性别变量分类绘图,可在绘图命令之后添加:
by(gender)
下面通过一个实际例子来加深理解,运用usaauto数据文件中的数据绘制mpg和weight关系的最为基本的散点图。输入如下命令语句:
twoway scatter mpg weight
这时Stata将绘制出如图3.7所示的散点图。
根据本节讲到的命令,对图形进行以下优化设置:
为图形添加标题“mpg与weight散点图”和副标题“1978年美国汽车数据图”。
为图形添加图例,位置在钟表2点钟处。
绘制一条拟合的趋势曲线。
为此,重新输入绘制图形的命令如下:
twoway scatter mpg weight || lfit mpg weight, title(mpg与weight散点图)
subtitle(1978年美国汽车数据图) legend(position(2))
在这个命令语句中,“twoway scatter mpg weight || lfit mpg weight”部分完成了两个主体图形的绘制,其中符号“||”表示在同一个坐标系内展示两个图形,lfit表示拟合曲线;“title(mpg与weight散点图) subtitle(1978年美国汽车数据图)”部分完成标题与副标题的设定;“legend(position(2))”部分完成图例位置的设定,位置在2点钟处。绘制的图形如图3.8所示。
此外,我们可以进一步将图3.8做如下改进:
将散点的形状设置为实心大三角,颜色为黑色。
为每个散点添加标签,内容为汽车的品牌(make),位置为9点钟处,颜色为黑色。
按照变量foreign分成两个图形进行绘制。
完成以上设置,用户需要重新输入绘制图形的命令如下:
twoway scatter mpg weight, title(mpg与weight散点图) subtitle(1978年美国汽车
数据图) msymbol(T) mcolor(black) mlabel(make) mlabcolor(black) mlabposition(9)
by(foreign)
在这个命令语句中,新加入的命令语句“msymbol(T) mcolor(black)”表示设定散点形状、颜色,msymobl(T)表示为实心大三角,mcolor(black)表示颜色为黑色;“mlabel(make) mlabcolor(black) mlabposition(9)”部分设置了散点标签内容为make生产商,颜色为黑色,位置在9点钟处;“by(foreign)”将数据分为两幅图形进行绘制。完成后的散点图如图3.9所示。
3.2.3 曲线标绘图的绘制
曲线标绘图也是双向关系图的一种,它是用线段的升降趋势来说明现象变化或变量之间关系的一种图形。它与散点图类似,实际上它就是将连续型的数值变量点连接起来的一种图形,但由于它还可以用于回归曲线的绘制,所以使用范围较散点图来说更为广泛。
绘制曲线标绘图的最基本命令语句为:
[twoway] line varlist [if] [in] [, options]
varlist是将要绘制图形的变量,一定注意x变量要放置在y变量之后,if是条件语句,in是范围语句。关于options选项内容,曲线标绘图与散点图均大部分一致,这里着重介绍不同的内容,即有关曲线内容的设定方式。
- 连接样式的设定
由于曲线标绘图就是将散点连接起来的图形,所以连接样式尤为重要,其设定的语句为connect(),其中括号中需要填入样式代码(具体内容如表3.4所示),默认的样式为直线连接。
- 线条样式的设定
线条样式的设定主要是通过clpattern()语句实现的,使用时需要将样式的代码填入括号中,代码内容如表3.5所示。
例如,运用financevalue.dta数据绘制曲线标绘图,此数据是中国1988年~2010年金融业增加值的数据,变量主要包括:year=年份,financevalue=金融业增加值(单位:亿),gdp=国内生产总值(单位:亿)。完整的数据位于本书附带光盘data第3章financevalue.dta工作文件中。
利用文件中的数据绘制金融业增加值financevalue和国内生产总值gdp随时间变化的曲线标绘图,所有设置均使用默认设置,需要输入的命令语句为:
twoway line financevalue gdp year
在这个命令语句中,twoway line是绘制曲线标绘图的命令,即告诉Stata为变量financevalue和gdp绘制随时间变化的曲线标绘图,但不进行任何设定,这时Stata将会绘制出如图3.10所示的曲线标绘图。
从图3.10中可以看到这个默认设置的许多弊端,例如图例是一行排列,线条用色彩区分,在黑白打印时无法区分等,因此,用户可以对此图形进行以下优化:
将图例分成两行设计,图例内容为“金融业增加值”和“国内生产总值”,并让图例位于图形内部的11点钟位置。
线条中的一条为实线连接,另一条为虚线连接。
线条中的一条为直线连接,另一条为stairstep方式连接。
完成以上设置后,用户需要重新输入绘制图形的命令如下:
twoway line financevalue gdp year, legend(label(1 "金融业增加值") label(2
"国内生产总值") position(11) ring(0) row(2)) clpattern(solid dash) connect(l J)
在这个命令语句中,“label(1 "金融业增加值") label(2 "国内生产总值")”部分实现了图例内容的设定,表示第1个图例为“金融业增加值”,第2个为“国内生产总值”;“position(11)”部分实现了图例位置的设定;“ring(0)”部分的作用是使图例显示在图形内部;“row(2)”部分的作用是使图例分两行显示;“clpattern(solid dash)”部分实现了实线和虚线的设定,表示第1条为实线,第2条为虚线;“connect(l J)”部分实现了直线连接和stairstep方式的连接。上述命令的执行结果如图3.11所示。