Stata绘图:绘制华夫饼图-waffle

发布时间:2022-05-23 阅读 1843

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下载 - 推文合集

作者:谢佳松 (中山大学)
邮箱:xiejs3@mail2.sysu.edu.cn


目录


1. 简介

华夫饼图 (Waffle Chart),或称为直角饼图,常用于直观展示百分比数据,因其类似华夫饼而得名。与传统的饼图相比较,华夫饼图表达的百分比更清晰和准确。它共有 100 个方格,每一个方格代表 1%,并通过不同的颜色展示数据特征。本文主要介绍如何使用 waffle 命令绘制华夫饼图。需要注意的是,waffle 命令只能在 Stata 17 中运行。

2. waffle 命令

waffle 命令安装:

ssc install waffle, replace

waffle 命令语法:

waffle varlist [if] [in] [, options]

其中,varlist 为可视化的核心变量。需要注意的是,该变量应为一个比例变量,取值范围为 0-1。options 如下:

  • wide:将输出的方形更改为宽矩形。默认情况下,华夫饼图排列格式为 10×10,加入 `wide` 后,排列格式变为为 5×20;
  • by(varlist):通过额外的分类变量生成多个华夫饼图;
  • colors(colorlist):指定由空格分隔的每个类别的颜色;
  • emptycolors(colorlist):指定空方格的颜色,默认为 (gs14)
  • outlinecolors(colorlist):指定方格轮廓的颜色,默认值为 (无);
  • emptyoutlinecolors(colorlist):指定空方格轮廓的颜色,默认值为 (无);
  • markersize(numlist):改变华夫饼图中方格的大小;
  • scheme(schemename):设置不同的主题;
  • title(tinfo):添加标题;
  • note(tinfo):添加注释;
  • name(tinfo):命名图表以供之后引用;
  • legend([contents] [location]):设置相关图例;
  • coolsgraph:绘制一个 S 图形 (彩蛋)。

3. 实例演示

3.1 数据处理

在本节中,我们将使用系统自带数据 pop2000.dta,来展示 waffle 命令的具体使用方法。该数据是一份 2000 年的普查数据,详细记录了不同年龄段人群的统计特征,包括总人口数、不同族裔人口数量等,十分适合进行华夫饼图的展示。由于本文主要展示 2000 年美国人口普查数据中黑种人族裔的结构比例,我们先简单观察一下黑种人族裔人口数量 black 在数据中的结构:

. sysuse pop2000.dta, clear
. list agegrp black

     +----------------------+
     |   agegrp       black |
     |----------------------|
  1. |  Under 5   2,804,786 |
  2. |   5 to 9   3,205,512 |
  3. | 10 to 14   3,121,530 |
  4. | 15 to 19   2,929,553 |
  5. | 20 to 24   2,628,752 |
     |----------------------|
  6. | 25 to 29   2,548,968 |
  7. | 30 to 34   2,618,602 |
  8. | 35 to 39   2,826,361 |
  9. | 40 to 44   2,700,418 |
 10. | 45 to 49   2,275,191 |
     |----------------------|
 11. | 50 to 54   1,805,457 |
 12. | 55 to 59   1,306,641 |
 13. | 60 to 64   1,063,469 |
 14. | 65 to 69     881,786 |
 15. | 70 to 74     731,386 |
     |----------------------|
 16. | 75 to 79     550,024 |
 17. | 80 to 84     346,465 |
     +----------------------+

其中,agegrp 为分组变量。由于该数据年龄每五岁就分为一段,为了使得展示更加简洁,将年龄段重新划分为 0~30 岁、30~64 岁和 65 岁及以上三个组别:

. gen small_age_cat = 0
. replace small_age_cat = 1 if inrange(agegrp,1,6)
. replace small_age_cat = 2 if inrange(agegrp,7,13)
. replace small_age_cat = 3 if inrange(agegrp,14,17)
. label define age_cat 1 "Under 30" 2 "30-64" 3 "65 & up"
. lab val small_age_cat age_cat

接下来以黑种人 black、白种人 white 和亚裔 asian 为例进行展示。数据处理过程如下:

. * 生成三种族裔的总人口数以及总人口数
. foreach x of varlist black white asian total{
  2.     egen tot_`x' = sum(`x')
  3. }

. * 分别生成三种族裔人口占总人口数的比例:
. gen pct_tot_black = tot_black / tot_total
. gen pct_tot_white = tot_white / tot_total
. gen pct_tot_asian = tot_asian / tot_total

. * 按照0~30岁、30~64岁以及65岁及以上三个组别的新分组生成总人口数
. egen small_age_tot_total = sum(total), by(small_age_cat)

. * 分别生成三种族裔人口在不同年龄段的人数占比
. foreach x in white black asian{
  2.     gen pct_`x'_age = `x' / total
  3.     egen small_age_tot_`x' = sum(`x'), by(small_age_cat)
  4.     gen pct_`x'_small_age = small_age_tot_`x' / small_age_tot_total
  5.     drop small_age_tot_`x'
  6. }       

. * 只保留分类变量和百分比变量:
. drop total-femisland tot_black-tot_total small_age_tot_total

3.2 华夫饼图

简单的数据处理完成后,就可以进行华夫饼图的绘制了。首先,不考虑任何 option,直接绘制 2000 年人口普查中黑种人占比的华夫饼图:

. waffle pct_tot_black

由数据可知,在 2000 年人口普查中,黑种人占比为 12.39%,因此所对应的华夫饼图中有色格子即为 12 个。如果觉得该图中方格过大,可以通过 markersize(numlist) 进行调整:

. waffle pct_tot_black, markersize(2)

在默认情况下,华夫饼图中方格的排列为 10×10,可以通过 `wide` 将其排列变化为 5×20:

. waffle pct_tot_black, wide

当然,可以通过增加各种常用的 Stata 绘图命令使得图形丰富和美观:

. * 添加标题、注释,更改正方形的颜色、轮廓和大小
. waffle pct_tot_black, title("Share of Black U.S. population in 2000 Census", ///
>     margin(medlarge)) note("Data from the U.S. 2000 Census") markersize(6)   ///
>     colors(teal) emptycolors(white) outlinecolors(gs5) emptyoutlinecolors(gs5)

waffle 命令还可以进行不同年龄组别的比较,通过 by() 实现:

. waffle pct_black_age, by(agegrp) scheme(s1mono)

该图能够给予我们的信息量非常大。可以看出,随着年龄段的增加,美国黑种人口数量占比逐渐下降。相应的百分比具体值也可以直接通过深色方格数量所体现。进一步,按照新的分组方式,绘制黑种人占比的华夫饼图:

. * rows(1) option 为:使得一行输出所有图片,防止多行
. waffle pct_black_small_age, by(small_age_cat, rows(1)) scheme(s1mono)

同样,该结果可以以宽模式 (5×20) 进行展示:

. waffle pct_black_small_age, by(small_age_cat, rows(3))               ///
>     title("Share of Black U.S. population in 2000 Census by Age",    ///
>     margin(medlarge)) note("Data from the U.S. 2000 Census")         ///
>     markersize(3) colors(teal) emptycolors(white) outlinecolors(gs5) ///
>     emptyoutlinecolors(gs5) wide scheme(s1mono)

4. 总结

本推文较为详细地介绍了一个用于华夫饼图绘制的命令 waffle。该命令的使用需要注意以下几点:

  • 需要在 Stata 17 版本运行;
  • 数据结构要符合华夫饼图的绘制原则。即需要一个百分比的数据 (注意:取值范围需要从 0-1,而非 0-100),以及一个分组变量;
  • waffle 对于分组变量格式不敏感,即字符型和数值型都可以。在数值型分组变量的情况下,最好给取值赋予label,这样输出的图形才会显示相应的分组名称;
  • 如果有另一个维度的分组变量,通过加入 by()waffle 绘制出的华夫饼图能够给予我们更多的信息。

5. 相关推文

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