美文网首页
STATA作钉子图和哑铃图

STATA作钉子图和哑铃图

作者: 冬之心 | 来源:发表于2022-05-19 11:06 被阅读0次

    缘起

    钉子图和哑铃图本质是一样的,都是每个对象包含两个端点,将两个端点连线。区别只是端点数据形式的差异,使得钉子图所有对象一般有一端是对齐的,而哑铃图则不用;钉子图要么垂直要么水平,而哑铃图不用。这两种图适用于制作:

    • 围绕某个轴的变化图(如增长率变化图),
    • 有最大值和最小值的图(如每天股票价格图和置信区间图),
    • 离散数据的分组比较图,(如不同职业的分性别的平均收入差异图和人口金字塔图),
    • 制作生命线(如生存时长线)。

    R的ggplot2包中函数geom_point()+geom_line(),或者ggplot2+ggalt包中函数geom_dumbbell(),可以制作这类图。

    STATA常规的作图命令,twoway line/scatter等,无法制作钉子图和哑铃图。需要专门的命令。这里介绍的是专门作这类图的命令。

    • spike系列命令配合scatter命令可以作出钉子图或哑铃图。
      • 包含 spikerspikepcspike三个命令。
    • cap系列命令是带帽子的spike图,即两端点添加符号标记。
      • 包含rcaprcapsympccapsym三个命令。
    • 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)。
    • rspikespike的区别在于,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]

    • pcspikerspike的区别在于,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值。
    • rcaprspike唯一的区别只是带一个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()

    相关文章

      网友评论

          本文标题:STATA作钉子图和哑铃图

          本文链接:https://www.haomeiwen.com/subject/xfctprtx.html