Stata连享会 主页 || 视频 || 推文 || 知乎 || Bilibili 站
温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc
,ihelp
,rdbalance
,gitee
,installpkg
⛳ Stata 系列推文:
作者: 张铭鑫 (复旦大学)
邮箱: 746548383@qq.com
编者按:本文第三部分所展示的图形示例均来自circlepack包作者的Github主页,特此感谢!
目录
圆堆图是一种可视化数据层次结构的绘图方法。从图形所包含的信息维度角度来看,最简单的圆堆图至少需要包含两个维度的信息:其一,具体的变量值,这个值是圆堆图的信息基点;其二,观察个体的类别信息,这个分类方法是圆堆图构建图形的具体方式。圆堆图的本质就是:以图形的方式根据类别信息分类展示观察个体的变量值。
敏锐的读者立刻就会发现:圆堆图与树状图别无两样! 事实也正是如此,从所包含的信息来看,圆堆图与树状图是完全等价的。不妨举一例:假设有一个由五位同学构成的班级,这一班级由五位同学构成,其中包含三位男同学与两位女同学,下表中汇报了该班级在最近一次计量经济学考试中的成绩。
姓名 | 性别 | 成绩 |
---|---|---|
A | 男 | 80 |
B | 男 | 86 |
C | 男 | 85 |
D | 女 | 90 |
E | 女 | 89 |
图1以树状图的形式展示了上表中的信息:首先根据性别信息将所有学生分为男、女两组,其次在每一组性别之下根据姓名(同样也是一种分类信息)展示了不同学生的考试成绩。图2采用圆堆图的形式展示了上表中的信息,容易发现:虽然表现的图形形式不同,但是从所包含的信息来看,树状图与圆堆图是完全相同的。
在 Stata 中,circlepack 命令为研究者提供了绘制圆堆图的简便方法。其基本语法如下。
circlepack numvar [if] [in], by(variables (min=1, max=3))
结合在上一部分中所指出的圆堆图的基本信息维度构成,我们很容易理解上述命令:根据(by)选项中所提供的类别变量(最少必须有一个类别信息,至多只能有三种分类)对所有样本进行分类,并展示所选中的数值变量(numvar)。
在必须的语法构成要素之外,circlepack 命令提供了一系列额外选项帮助研究者设计满足审美和格式要求的圆堆图。主要的选项如下:
在本部分我们将通过一些列图形展示 circlepack 命令的基本用法以及其主要选项的功能。
* 安装 circlepack 包
ssc install circlepack, replace
* 安装 palettes 包
ssc install palettes, replace
ssc install colrspace, replace
* 安装 schemepack 包
ssc install schemepack, replace
*清空内存数据
clear
*将默认图形模版替换为白板模版,在该模版下图形将更加简洁
set scheme white_tableau
*设置图形字体
graph set window fontface "Arial Narrow"
*导入数据
use "https://github.com/asjadnaqvi/stata-circlepack/blob/main/data/demo_r_pjangrp3_clean.dta?raw=true", clear
*展示数据基本结构
list in 1/5
+--------------------------------------------------------+
| NUTS_ID year y_00_14 y_15_64 y_65_99 y_TOT |
|--------------------------------------------------------|
1. | AL 2020 478850 1947069 420036 2845955 |
2. | AL0 2020 478850 1947069 420036 2845955 |
3. | AL01 2020 143076 542372 119241 804689 |
4. | AL011 2020 23585 75998 16274 115857 |
5. | AL012 2020 49133 198233 43331 290697 |
+--------------------------------------------------------+
*在该数据集中我们仅需用到分类变量NUTS_ID和数值变量y_TOT
keep NUTS_ID y_TOT
*筛选样本
drop if y_TOT==0
keep if length(NUTS_ID)==5
*在分类信息NUTS_ID的基础上进一步生成分类信息
gen NUTS2 = substr(NUTS_ID, 1, 4)
gen NUTS1 = substr(NUTS_ID, 1, 3)
gen NUTS0 = substr(NUTS_ID, 1, 2)
*将NUTS_ID重命名为NUTS3
ren NUTS_ID NUTS3
*展示用于作图的数据结构,该数据集中包含四种不同层次的分类信息NUTS0-NUTS3,以及一个数值信息y_TOT。
list in 1/5
+----------------------------------------+
| NUTS3 y_TOT NUTS2 NUTS1 NUTS0 |
|----------------------------------------|
1. | AL011 115857 AL01 AL0 AL |
2. | AL012 290697 AL01 AL0 AL |
3. | AL013 75428 AL01 AL0 AL |
4. | AL014 122700 AL01 AL0 AL |
5. | AL015 200007 AL01 AL0 AL |
+----------------------------------------+
*基本图形:根据NUTS0分类展示欧盟二十七国的人口数据,并添加标题
circlepack y_TOT, by(NUTS0) format(%15.0fc) title("Population of EU 27 countries")
*拓展图形一:隐去基础图形中的值信息
circlepack y_TOT, by(NUTS0) title("Population of EU 27 countries") noval
*拓展图形二:在拓展图形一中增加边界圆
circlepack y_TOT, by(NUTS0) title("Population of EU 27 countries") circle0 noval
*拓展图形三:在NUTS0的基础上增加NUTS1分类信息
circlepack y_TOT, by(NUTS1 NUTS0) format(%15.0fc) noval circle0
*拓展图形四:在拓展图形3的基础上增加标签
circlepack y_TOT, by(NUTS1 NUTS0) format(%15.0fc) noval addtitles
*拓展图形五:在NUTS0与NUTS1的基础上进一步增加NUTS2分类信息,去除标签并将圆内的填充值设为0.06
circlepack y_TOT, by(NUTS1 NUTS0) format(%15.0fc) noval addtitles
*拓展图形六:筛选NUTS0值为AT的样本,并基于NUTS3和NUTS2分类信息展示y_TOT的值,去除数值、增加标签
circlepack y_TOT if NUTS0=="AT", by(NUTS3 NUTS2) ///
addtitles noval format(%15.0fc) ///
title("Population of Austria at NUTS2 and NUTS3 level") circle0
*拓展图形七:筛选NUTS0值为NL的样本,并基于NUTS3和NUTS2分类信息展示y_TOT的值,去除数值、增加标签,将调色板设置为 CET L10
circlepack y_TOT if NUTS0=="NL", by(NUTS3 NUTS2 NUTS1) ///
addtitles noval format(%15.0fc) ///
title("Population of Netherlands at NUTS1-NUTS3 level") palette(CET L10)
*拓展图形八:筛选NUTS0值为NL的样本,并基于NUTS3、NUTS2和NUTS1分类信息展示y_TOT的值,去除数值、增加标签,将调色板设置为 CET L10,将图形设置为六边形,并将六边形内的填充设置为0.3
circlepack y_TOT if NUTS0=="NL", by(NUTS3 NUTS2 NUTS1) ///
addtitles noval format(%15.0fc) ///
title("Population of Netherlands at NUTS1-NUTS3 level") palette(CET L10) points(6) pad(0.3)
*拓展图形九:筛选NUTS0值为PT的样本,并基于NUTS3和NUTS2分类信息展示y_TOT的值,去除数值、增加标签,将调色板设置为 CET C6,将图形设置为十二边形,并将十二边形内的填充设置为0.1
circlepack y_TOT if NUTS0=="PT", by(NUTS3 NUTS2) ///
addtitles noval format(%15.0fc) title("Population of Portugal at NUTS1-NUTS3 level") palette(CET C6) points(12) pad(0.1)
免费公开课
最新课程-直播课
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 文本分析、机器学习、效率专题、生存分析等 | |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
⛳ 课程主页
⛳ 课程主页
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会-常见问题解答:
✨ https://gitee.com/lianxh/Course/wikis
New!
lianxh
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh