缘起
钉子图和哑铃图本质是一样的,都是每个对象包含两个端点,将两个端点连线。区别只是端点数据形式的差异,使得钉子图所有对象一般有一端是对齐的,而哑铃图则不用;钉子图要么垂直要么水平,而哑铃图不用。这两种图适用于制作:
- 围绕某个轴的变化图(如增长率变化图),
- 有最大值和最小值的图(如每天股票价格图和置信区间图),
- 离散数据的分组比较图,(如不同职业的分性别的平均收入差异图和人口金字塔图),
- 制作生命线(如生存时长线)。
R的ggplot2包中函数geom_point()+geom_line(),或者ggplot2+ggalt包中函数geom_dumbbell(),可以制作这类图。
STATA常规的作图命令,twoway line/scatter等,无法制作钉子图和哑铃图。需要专门的命令。这里介绍的是专门作这类图的命令。
-
spike系列命令配合scatter命令可以作出钉子图或哑铃图。- 包含
spike、rspike、pcspike三个命令。
- 包含
-
cap系列命令是带帽子的spike图,即两端点添加符号标记。- 包含
rcap、rcapsym、pccapsym三个命令。
- 包含
-
spikeplot命令用于专门统计计数频率和百分比的钉子图。
一、spike系列命令
spike
twoway spike yvar xvar [if] [in] [, options]
- 实际上是一个端点是(x,0),一个端点是(x,y)
- 隐藏的端点y=0,可以通过
base(#)设置成其它值。 -
twoway的选项,这里都适用。下同。
| 选项 | 说明 |
|---|---|
| vertical | 垂直线,默认值 |
| horizontal | 水平线 |
| base(#) | 起始值,默认为0 |
- 注意:水平线是由垂直线转置而成的,并不是(0, y)与(x, y)的连线,而是(0, x)与(y, x)的连线。下同。
sysuse sp500, clear
list date close change in 1/5
twoway spike change date
twoway spike change date, horizon
twoway line close date || spike change date
rspike -- Range plot with spikes
twoway rspike y1var y2var xvar [if] [in] [, options]
- 每个x对应两个y值,即一个端点为(x, y1),另一个为(x, y2)。
-
rspike与spike的区别在于,spiker的起始值是固定值,而rspike的起始值是变量y1var
| 选项 | 说明 |
|---|---|
| vertical | 垂直钉子图,默认值 |
| horizontal | 水平钉子图 |
sysuse sp500, clear
twoway rspike high low date
pcspike -- Paired-coordinate plot with spikes
twoway pcspike y1var x1var y2var x2var [if] [in] [, options]
-
pcspike与rspike的区别在于,rspike所有对象的连线的一端是对齐的,而pcspike则不用。 -
pcspike的线的起点是(x1, y1),终点是(x2, y2)
sysuse nlswide1, clear
list occ wage68 ttl_exp68 wage88 ttl_exp88
twoway pcspike wage68 ttl_exp68 wage88 ttl_exp88
twoway pcspike wage68 ttl_exp68 wage88 ttl_exp88 ||
scatter wage68 ttl_exp68, msym(O) ||
scatter wage88 ttl_exp88, msym(O) pstyle(p4)
mlabel(occ) xscale(range(17))
title("Change in US Women's Experience and Earnings")
subtitle("By Occupation -- 1968 to 1988")
ytitle(Earnings) xtitle(Total experience)
note("Source: National Longitudinal Survey of Young Women")
legend(order(2 "1968" 3 "1988"))
二、带帽的钉子图:cap系列命令
rcap -- Range plot with capped spikes
twoway rcap y1var y2var xvar [if] [in] [, options]
- 每个x对应两个y值。
-
rcap与rspike唯一的区别只是带一个I型帽子。
sysuse sp500, clear
twoway rcap high low date
rcapsym -- Range plot with spikes capped with marker symbols
- rcapsym和rcap的区别在于,方便添加标记和标签。
twoway rcapsym y1var y2var xvar [if] [in] [, options]
| 选项 | 说明 |
|---|---|
| vertical | 垂直钉子图,默认值 |
| horizontal | 水平钉子图 |
| marker_options | 标记选项:形状、颜色、大小等 |
| marker_label_options | 标签的选项:指定标签变量、位置等 |
sysuse sp500, clear
twoway rcapsym high low date
pccapsym -- Paired-coordinate plot with spikes and marker symbols
twoway pccapsym y1var x1var y2var x2var [if] [in] [, options]
-
pccapsym相当于pcspike,区别在于加帽。 - 选
headlabel:标签放在第二端点,而不是第一端点。
sysuse nlswide1, clear
list occ wage68 ttl_exp68 wage88 ttl_exp88
twoway pccapsym wage68 ttl_exp68 wage88 ttl_exp88
twoway pccapsym wage68 ttl_exp68 wage88 ttl_exp88, headlabel mlabel(occ)
三、计数钉子图:spikeplot
spikeplot varname [if] [in] [weight] [, options]
-
Spikeplot为一个变量产生一个频率图,其中频率呈现为从零开始的垂直线。 - 频率可以是计数,百分比或计数的平方根。
- 垂直线可以根据用户的选择由非零的基线产生。
-
spike系列命令的选项,这里都适用。
| 选项 | 说明 |
|---|---|
| round(#) | 带宽 |
| fraction | 占总体的百分比 |
| root | 计数的平方根 |
| spike_options | 钉子图的呈现样式选项 |
| addplot(plot) | 添加其它plot |
webuse ghanaage
spikeplot age [fw=pop], ytitle("Population in 1000s") xlab(0(10)90) xmtick(5(10)85)
spikeplot age [fw=pop], fraction
spikeplot age [fw=pop], round(10) #10岁一组
四、图中添加水平线或垂直线
- 只需添加选项
xline()或yline()