Stata绘图:峰峦图绘制 joy_plot

发布时间:2022-06-05 阅读 708

Stata连享会   主页 || 视频 || 推文 || 知乎 || Bilibili 站

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc, ihelp, rdbalance, gitee, installpkg

课程详情 https://gitee.com/lianxh/Course

课程主页 https://gitee.com/lianxh/Course

⛳ Stata 系列推文:

PDF下载 - 推文合集

作者:甘月 (华南师范大学)
邮箱jagy1996@163.com


目录


1. 简介

本文将介绍 joy_plot 命令,该命令由 Fernando (2022) 开发,主要用于绘制 joyplot。joyplot 是一种看起来犹如山水画一般的层峦叠嶂图形,由于外形与山峦类似,其中文名为山峦图、峰峦图或叠嶂图。这种图形本质上是一种密度图,能够同时显示多组数据的变化趋势,因此可以被用于组间对比分析的可视化。

2. 命令介绍

* 命令安装
net describe http://repec.org/bocode/j/joy_plot
ssc install joy_plot,  replace
ssc install palettes,  replace
ssc install colrspace, replace 
* 命令语法
joy_plot varname [if] [in] [aweight], [over(varname) by(varname)] 
    [joy_plot_options color_options legend_options twoway_options]

其中,必选项:

  • over(varname):指定用于绘制 joyplot 的分组变量。如果不需要用到该选择,建议直接使用 kdensity 命令绘制密度图;
  • by(varname):指定在 over() 分组的基础上进一步分组的变量,为 over() 定义的每个组创建多个密度图。在绘制小提琴图时,要求是二值变量。

外观选项:

  • radj(#):使用时,绘图范围将扩展到超过 varname 的最大或最小值,默认值为0;
  • range(#1 #2):使用时,将绘图范围设置为 #1#2 之间,默认使用样本的最大值和最小值;
  • dadj(#):用于调整密度的高度,使得图层之间能够相互重叠,默认值为 1 (没有重叠);
  • bwadj(#)# 用于确定每个子图的带宽,取值应该在 0 到 1 之间。当 bwadj=1 时,每个图使用由 kdensity 决定的带宽,它可能因子组而异。当 bwadj=0 时,所有图在所有子组中使用带宽等于简单平均。# 取任何介于 0 和 1 之间的数字时,都将使用两个选项之间的加权平均值作为子图的带宽;
  • bwadj2(#)# 用于改变所有图层的带宽,取值必须为正数。例如,bwadj2(0.5) 可以将所有图层的带宽修改为原来的一半,默认值为 1;
  • bwadj3(#)# 用于定义所有图层的外生带宽,取值必须为正数。例如,bwadj3(0.5) 将所有图层的带宽设为0.5,这是设置图层带宽最快捷的选项;
  • kernel(kfun):用于选择一个特定类型的核函数来绘图,默认是高斯;
  • nobs(#):定义将使用多少个点绘图。# 取较大的数字时会产生一个更平滑的图形,但也会使用更多的内存,默认值为 200。

图例选项:

  • strict:除非指定,否则将使用值标签或 over(variable) 的值来标记组。如果值标签未定义,使用 strict 不会显示任何文本;
  • notext:使用时,不会在垂直轴上添加任何组标识;
  • textopt(opts):用于更改组标识的某些特征;
  • right:当使用时,将把组标识放在图的右侧,默认是放在图形左侧;
  • offset(#):当使用时,将组标识向右 (+) 或左 (-) 移动 #
  • gap0:当使用时,所有图形将从 0 开始绘制,效果类似于在一个图中绘制多个核密度图。该选项不能与 violin 选项同时使用;
  • alegend:当使用时,将在图表中添加一个带有 over(varname)by(varname) 定义的所有数值的图例。默认情况是不显示任何图例。当 over()by() 被同时指定时,将根据 by() 中变量的值来创建图例;
  • iqr[(numlist)]:当指定时,将在图中添加显示指定百分位数 numlist 的线条。如果没有提供 numlist,它会在图中显示第 25、50 和 75 百分位数的线条;
  • iqrlwidth(numlist):用于改变标记指定百分位数线条的宽度,默认值为 0.3;
  • iqrlcolor(color):用于改变标记指定百分位数线条的颜色或颜色属性,它可能覆盖其他颜色选项;
  • violin:当使用时,它将绘制一个小提琴图,而不是核密度图。如果使用 by(),它将绘制一个半小提琴图。

颜色选项:

  • color(colorlist):使用一个颜色列表为 over(varname) 定义的每个组指定颜色。如果指定的颜色少于 over(varname) 定义的组,后面的组将使用最后指定的颜色。例如,如果输入 color(red blue),但 over(varname) 定义了 3 个组,那么最后一个组也将被指定为 “蓝色”;
  • colorpalette(*):另一种指定颜色的方法,使用 colorpalette 命令来定义颜色并将它们用于散点图。

3. Stata 实例

我们利用作者提供的工资数据集 oaxaca.dta,对不同婚姻状况下的工资分布情况进行可视化。

. use http://fmwww.bc.edu/RePEc/bocode/o/oaxaca.dta , clear
. gen mstatus=single+2*married+3*divorced
. joy_plot lnwage, over(mstatus)

在上图的基础上,我们添加一个标签来区分所有的组,并显示为一个图例。

. label define mstatus 1 Single 2 Married 3 Divorced
. label values mstatus mstatus
. joy_plot lnwage, over(mstatus) alegend notext

如果想要使用默认颜色以外的颜色,有以下三种选择:手动提供颜色列表,使用 colorpalette() 选项,以及使用 使用 color(colorstyle) 选项。

. * 手动提供颜色列表: 海军蓝和金色
. joy_plot lnwage, over(mstatus) alegend color(navy gold)
. * 使用 colorpalette() 选项  
. joy_plot lnwage, over(mstatus) alegend colorpalette(blues) notext

上述命令指定填充色为蓝色,notext 选项表示不在图中显示组标识。

. * 使用 color(colorstyle) 选项  
. joy_plot lnwage , over(mstatus) color(gs10) iqr right title("Wages distribution") ///
>     subtitle("by Marital Status")

上述命令中,color(gs10) 将填充色设置为 gs10iqr 表示在图中显示第 25、50 和 75 百分位数的线条,right 表示将组标识放在图形右侧,title()subtitle() 分别表示添加主标题和副标题。

绘制一个忽略分布下尾的图,具体命令如下。其中选项 range(2 5) 将绘图范围限制在区间 [2, 5] 上,从而实现忽略分布下尾的要求。

. joy_plot lnwage, over(mstatus) iqr range(2 5) title("Wages distribution") ///
>     subtitle("by Marital Status")  

比较不同婚姻状况的男性和女性的工资分布,需要通过选项 over(mstatus)by(female) 实现。

. joy_plot lnwage, over(mstatus) by(female) title("Wages distribution") ///
>     subtitle("by Marital Status")

图中蓝色表示男性,红色表示女性 (下同)。接着,我们使用小提琴图来比较不同婚姻状况的男性和女性工资分布,需要通过 violin 选项实现。

. joy_plot lnwage , over(mstatus) by(female) title("Wages distribution") ///
>     subtitle("by Marital Status and Gender") violin

比较不同性别的单身、已婚和离婚人士的工资分布。

. joy_plot lnwage , by(mstatus) over(female) title("Wages distribution") ///
>     subtitle("by Marital Status and Gender")

图中蓝色表示单身,红色表示已婚,绿色表示离婚。0 和 1 分别表示男性和女性,由于未给 female 添加值标签,因此图中直接显示数值。另外,由于 mstatus 不是一个二值变量,因此不能使用 violin 选项。进一步地,可通过 alegend 选项添加图例,直观显示红、蓝、绿色代表的含义。

. joy_plot lnwage , by(mstatus) over(female) title("Wages distribution") ///
>     subtitle("by Marital Status and Gender") alegend

4. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 绘图, m
安装最新版 lianxh 命令:
ssc install lianxh, replace

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会-主页知乎专栏,700+ 推文,实证分析不再抓狂。直播间 有很多视频课程,可以随时观看。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxhsongbl 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh