查看原文
其他

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

连享会 连享会 2023-10-24

👇 连享会 · 推文导航 | www.lianxh.cn

连享会 · 效率分析专题

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

温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:


目录

  • 1. 简介

  • 2. waffle 命令

  • 3. 实例演示

    • 3.1 数据处理

    • 3.2 华夫饼图

  • 4. 总结

  • 5. 相关推文



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:将输出的方形更改为宽矩形。默认情况下,华夫饼图排列格式为 1010,加入 `wide` 后,排列格式变为为 520;
  • 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)

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

. 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)

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

. 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

  • 专题:Stata教程
    • 普林斯顿Stata教程(二) - Stata绘图
  • 专题:Stata绘图
    • Stata绘图:随机推断中的系数可视化
    • Stata绘图:重新定义坐标轴刻度标签
    • Stata绘图:用-bytwoway-实现快速分组绘图
    • Stata绘图:一个干净整洁的-Stata-图形模板qlean
    • Stata绘图:怎么在Stata图形中附加水平线或竖直线?
    • Stata绘图:在图片中添加虚线网格线
    • Stata绘图:制作教学演示动态图-GIF
    • Stata绘图:绘制一颗红心-姑娘的生日礼物
    • Stata绘图:bgshade命令-在图形中加入经济周期阴影
    • Stata绘图:让图片透明——你不要掩盖我的光芒
    • Stata:图形美颜-自定义绘图模板-grstyle-palettes
    • Stata绘图:多维柱状图绘制
    • Stata绘图:用暂元统一改变图形中的字号
    • 一文看尽 Stata 绘图
    • Stata绘图:绘制单个变量的时序图

课程推荐:因果推断实用计量方法
主讲老师:丘嘉平教授
🍓 课程主页https://gitee.com/lianxh/YGqjp

New! Stata 搜索神器:lianxhsongbl  GIF 动图介绍
搜: 推文、数据分享、期刊论文、重现代码 ……
👉 安装:
. ssc install lianxh
. ssc install songbl
👉  使用:
. lianxh DID 倍分法
. songbl all

🍏 关于我们

  • 连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 直通车: 👉【**百度一下:**连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存