Stata连享会 主页 || 视频 || 推文 || 知乎 || Bilibili 站
温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc
,ihelp
,rdbalance
,gitee
,installpkg
⛳ Stata 系列推文:
Stata连享会 主页 || 视频 || 推文 || 知乎 || Bilibili 站
温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc
,ihelp
,rdbalance
,gitee
,installpkg
⛳ Stata 系列推文:
作者: 温世彬 (中国农业大学)
邮箱: shibin_wen@163.com
目录
散点图是一种功能强大且无处不在的图形,通常用于展示双变量数据 x 和 y 的之间的关系。然而,当一个区域中的散点密度变高时,这些图将变得难以阅读 (如图 1 所示)。
图 1 说明:4689 名受试者舒张压与身体质量指数的散点图,来自 Framingham 心脏研究数据。该图中心附近过多的观测值使得我们难以确定这两个变量最常见值的观测密度。
Cleveland 和 McGill (1984) 最早引入向日葵图来解决这一数据重叠问题。向日葵由许多被称为花瓣的短线段组成,它们从中心点向外辐射。在向日葵图中,x-y 平面被划分为一个由规则方形箱组成的格子;向日葵放置在每个包含一个或多个观察值的箱格中心。绘制它们是为了使每个向日葵的花瓣数等于相关箱格中的观察值数。向日葵图可有效解决高密度散点图引起的重叠问题。但绘制该向日葵图会使图形低密度区域丢失部分位置精确的点,当箱格尺寸很大时更是如此。Carr 等人提出,只要每个箱格的观测数据少于 4 个,就可以在其确切位置绘制单独的点。他们还引入了六角形的箱格使得向日葵堆放更为密集紧凑,并且不再强调方形箱格可以引入的水平和垂直图案。Scott 研究表明,对于二元直方图,六边形箱格产生的均方误差比任何其他平面上的箱格形状都要低。Carr 等人也尝试使用一个六边形符号,其大小随着箱格中观察次数的增加而单调增加。
Plummer 和 Dupont (2003) 将向日葵图主要特征与 Carr 等人研究的密度分布图结合起来,引入了密度分布向日葵图。图 2 显示了 Framingham 心脏研究的受试者舒张压与身体质量指数的密度分布向日葵图 (与图 1 中数据集相同)。数据点以下三种方式之一表示:单个数据点的小圆、浅色向日葵和深色向日葵。在一朵浅色向日葵中,每 1 片花瓣代表 1 个观察值。在图 2 中,浅色向日葵的背景是浅绿色,花瓣是深棕色。在一朵深色向日葵中,每 1 片花瓣代表
说明:
密度分布向日葵图的数据来自图 1。 在本例中,x-y 平面被划分为宽度为 的正六边箱格。 每个观测数据用蓝色圆圈表示,只要每个数据箱的观测数据少于 3 个,它们的精确位置就用蓝色圆圈表示。 在密度较高的箱格中观察到的是浅色或深色向日葵。 浅色向日葵的背景是淡绿色的,每 1 片花瓣代表 1 次观察。 深色向日葵背景为棕色,每 1 片花瓣代表 7 次观测值。 这张图表达了观测值的密度分布,同时也允许读者准确地确定任一区域的具体观测值数量。
综上,可以发现向密度分布日葵图的主要优点:在重叠的地方用一朵向日葵花的花瓣数目来表示重叠数据的数目,用以克服散点图数据重叠问题。
sunflower
能够绘制密度分布向日葵图,即 density-distribution sunflower plots (Plummer and Dupont, 2003)。深色向日葵、浅向日葵和标记符号分别代表数据的高、中和低密度区域。这些图对于显示密度太大而无法使用常规散点图的双变量数据很有用。
sunflower
命令安装:
ssc install sunflower, replace
sunflower
命令语法:
sunflower yvar xvar [if] [in] [weight], [, options]
其中,yvar
、xvar
分别为可视化的两个核心变量,表示 y 和 x 之间的关系
Main options 选项如下:
nograph
:不显示图notable
:不显示摘要表marker_options
:同散点图 marker 选项设置,用于控制散点标记的形状、颜色、大小、角度等
Bins/Petals options
选项如下:
binwidth(#)
:六边形箱格的宽度binar(#)
:六边形箱格的纵横比bin_options
:六边形箱格相关选项设定
lbstyle(areastyle)
、dbstyle(areastyle)
:分别指定浅色和深色六边形箱格的整体外观lbcolor(colorstyle)
、dbcolor(colorstyle)
:分别指定浅色和深色六边形箱格的边框和填充颜色lbfcolor(colorstyle)
、dbfcolor(colorstyle)
:分别指定填充浅色和深色六边形箱格内部的颜色lblstyle(linestyle)
、dblstyle(linestyle)
:分别指定用于该区域线的整体样式,其中包括其模式、粗细、颜色等lblcolor(colorstyle)
、dblcolor(colorstyle)
:分别指定浅色和深色六边形箱格的边框颜色lblwidth(linewidthstyle)
、dblwidth(linewidthstyle)
:分别指定浅色和深色六边形箱格的边框粗细light(#)
:浅色向日葵的最小观测值,默认为 3dark(#)
:深色向日葵的最小观测值,默认为 13xcenter(#)
:参照箱格的 x 轴ycenter(#)
:参照箱格的 y 轴petalweight(#)
:指定深色向日葵的每个花瓣所代表的观察次数,默认最大值为 14petallength(#)
:制定向日葵花瓣的长度petal_options
:向日葵花瓣相关选项设定
lflstyle(linestyle)
、dflstyle (linestyle)
:分别指定浅色和深色向日葵花瓣的整体样式lflcolor(colorstyle)
、dflcolor(colorstyle)
:分别指定浅色和深色向日葵花瓣的颜色lflwidth(linewidthstyle)
、dflwidth(linewidthstyle)
:分别指定浅色和深色向日葵花瓣的宽度flowersonly
:只显示花瓣,而不展示箱格nosinglepetal
:禁止单独的花瓣Add plots options 选项如下:
addplot(plot)
:将其他图添加到生成图中
在本节中,我们将使用系统自带的 nlsw88.dta
数据集展示 sunflower
的具体用法。nlsw88.dta
主要包含了 1988 年 34-36 岁妇女婚姻状况、工作及薪资等相关变量,主要用于研究婚姻对女性工资造成的结构性的差异问题等。我们采用该数据集中的 wage
(妇女每小时工资)和 tenure
(工作任期)两个变量进行密度分布向日葵图的绘制。
* set graph_opts 设置绘图选项
global graph_opts graphregion(color(white)) leg(region(lc(none) fc(none)) row(1))
* 调用内置数据集
sysuse nlsw88, clear
* 查看样本中 wage 和 tenure 关系
scatter wage tenur, $graph_opts mcolor(blue) msymbol(Oh) msize(small)
可以看到,直接绘制 wage
与 tenure
散点图,在左下角部分的样本几乎都是重叠在一块,显得非常密集。如果我们想要区分出最密集的部分以及样本数量,散点图似乎很能判断出来。因此,我们可以尝试使用向日葵图。
首先,绘制最基础的向日葵图,其对散点的 options
选项和基本的 scatter
命令是一致的,具体代码如下:
sunflower wage tenur, $graph_opts msize(small) xlabel(0(5)25)
图示结果如下:
可以看到样本最为密集的是左下方。如果不做任何设置,sunflower
命令会根据重叠或邻近样本数量自动生成最适合的深色向日葵图和浅色向日葵图。浅色向日葵的最小观测值默认为 3,意味要生成图中淡绿色的六边形底色图案必须要有 3 个样本点。可以看到浅色向日葵里面的花瓣数量最少也是 3 片,1 片花瓣代表 1 个观测值。同理,深色向日葵的最小观测值默认为 13,意味着生成图中棕色的六边形底色图案必须要有 13 个样本点,在不添加任何设置的命令下,系统自动生成了 1 片黑色花瓣表示 6 个观测值。
以下图圈出来的两个向日葵为例,左上角圆圈中的 1 个浅色向日葵有 4 片棕色花瓣,表明该附近有 4 个样本点,且靠的非常近。底下圆圈中的 1 个深色向日葵有 2 片黑色花瓣,表明该附近有 2×6=12 个样本点靠的非常近,甚至可能几乎重叠。显然,采用这种方式能够较好区分重叠数据点的数量及其密度分布。
在输入上述命令时,也会同时生成一张表格(见下方)展示上图的详细信息,具体包括箱格宽度、高度、纵横比等,这些都是在第二节 options 选项中提及到的,我们可以通过修改相应参数进行调整。这幅图的结果可以看到总共有 2231 个观测值,一个箱格中最大观测值数量为 80 个,其中有 3 片花朵的浅色向日葵有 25 朵,有 4 片花朵的浅色向日葵有 25 朵…… 依次类推。如果不想展示这个表格,在后面加入 notable
命令即可。
当然我们也可以调节生成六边形底色图案的观测值数量。首先,对于浅色向日葵,我们考虑极端的情况,只要有 1 个观测值,就生成 1 个浅色向日葵,只需在命令后加入 light(1)
,结果见下方左图。其次,对于深色向日葵,我们将最低观测值数量设置高一些,默认值为 13,我们设置为 30 看下效果。结果见下方右图,可以看到最为密集的仍然是最下角部分。
sunflower wage tenur, $graph_opts msize(small) xlabel(0(5)25) light(1)
sunflower wage tenur, $graph_opts msize(small) xlabel(0(5)25) light(1) dark(30)
对于深色向日葵,系统默认生成的是 1 片黑色花瓣表示 6 个观测值,对于这个数量,我们也可以进行调整,比如分别指定为 3 或 10。
sunflower wage tenur, $graph_opts msize(small) xlabel(0(5)25) petalweight(3) // 指定为 3
sunflower wage tenur, $graph_opts msize(small) xlabel(0(5)25) petalweight(10) // 指定为 10
只看花瓣,不要六边形箱格图案:
sunflower wage tenur, $graph_opts msize(small) xlabel(0(5)25) flowersonly
修改六边形箱格图案底色和向日葵花瓣颜色:
改变六边形箱格宽度:
sunflower wage tenur, $graph_opts msize(small) xlabel(0(5)25) binwidth(0.5) // 宽度设置为 0.5
sunflower wage tenur, $graph_opts msize(small) xlabel(0(5)25) binwidth(1.5) // 宽度设置为 1.5
添加数据标签和箭头:
sunflower wage tenur, $graph_opts msize(small) xlabel(0(5)25) ///
addplot(pcarrowi 28 22 26 21.8 (12) `"{fontface "宋体":这是一个散点}"' ///
24 15 16 13.8 (12) `"{fontface "宋体":这是一个浅色向日葵}"' ///
0.5 9 4 9.5 (6) `"{fontface "宋体":这是一个深色向日葵}"') ///
leg(order(1 2 3))
本推文较为详细地介绍了密度分布向日葵图 sunflower
,其可以直观地反映两个变量的二元分布,并且提供了比传统的二元散点图关于实际数据集更多的信息,有助于克服散点图的数据重叠问题。该命令可以搭配原有的 scatter
命令相关选项,并且可以借助 addplot()
命令添加其他图形。
Note:产生如下推文列表的 Stata 命令为:
lianxh 绘图, m
安装最新版lianxh
命令:
ssc install lianxh, replace
免费公开课
最新课程-直播课
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 文本分析、机器学习、效率专题、生存分析等 | |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
⛳ 课程主页
⛳ 课程主页
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会-常见问题解答:
✨ https://gitee.com/lianxh/Course/wikis
New!
lianxh
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh