缘起
钉子图和哑铃图本质是一样的,都是每个对象包含两个端点,将两个端点连线。区别只是端点数据形式的差异,使得钉子图所有对象一般有一端是对齐的,而哑铃图则不用;钉子图要么垂直要么水平,而哑铃图不用。这两种图适用于制作:
- 围绕某个轴的变化图(如增长率变化图),
- 有最大值和最小值的图(如每天股票价格图和置信区间图),
- 离散数据的分组比较图,(如不同职业的分性别的平均收入差异图和人口金字塔图),
- 制作生命线(如生存时长线)。
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()
网友评论