华夫饼图

作者

华夫饼图通过一个由小方块组成的网格来直观表示分类数据,这些方块看起来像华夫饼。每个类别被分配一个独特的颜色,分配给每个类别的方块数量对应其在总数据计数中的比例份额。

示例

Waffle DEMO

环境配置

  • 系统要求: 跨平台(Linux/MacOS/Windows)

  • 编程语言:R

  • 依赖包:ggplot2, waffle, dplyr

# 安装包
if (!requireNamespace("ggplot2", quietly = TRUE)) {
  install.packages("ggplot2")
}
if (!requireNamespace("waffle", quietly = TRUE)) {
  install.packages("waffle")
}
if (!requireNamespace("dplyr", quietly = TRUE)) {
  install.packages("dplyr")
}

# 加载包
library(ggplot2)
library(waffle)
library(dplyr)

数据准备

主要运用TCGA数据库和R内置数据集mtcars

# 1.TCGA数据库(2020年肺癌的临床数据)
TCGA_cli_df <- readr::read_tsv("https://bizard-1301043367.cos.ap-guangzhou.myqcloud.com/raponi2006_public_raponi2006_public_clinicalMatrix.gz")
#数据准备
counts <- table(TCGA_cli_df$T)
counts <- as.data.frame(counts)
names(counts)[names(counts) == "Var1"] <- "T"

# 2.R内置的data——mtcars
counts1 <- table(mtcars$cyl)
counts1 <- as.data.frame(counts1)
names(counts1)[names(counts1) == "Var1"] <- "cyl"

# 3.自创数据集
data <- data.frame(
  group = c("First group", "First group", "First group", "First group",
            "First group", "First group", "Second group", "Second group",
            "Second group", "Second group", "Third group", "Third group"),
  subgroup = c("A", "B", "C", "D", "E", "F", "A", "B", "C", "D", "A", "B"),
  value = c(10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120)
)

可视化

1. 基本绘图(waffle包)

1.1 基本代码

TCGA数据为例

waffle(counts)

基本绘图

这个华夫饼图描述了不同肿瘤分期在总样本中所占的比例。

1.2 美化图形

  • rows:块的行数,默认为10。
  • xlab:图表下方的文本,建议用来描述每个方块代表的含义,例如“1 sq == 1000”。
  • title:图表标题。
  • colors:与parts中的值数量相等的颜色数组。如果省略,使用Color Brewer “Set2”颜色。
  • size:块之间分隔符的宽度,默认为2。
  • flip:翻转x和y轴。
  • pad:要用多少个块来填充网格。
  • glyph_size:字形的大小。
  • legend_pos:图例位置。
waffle(counts,rows = 5,
       colors = c("#fb5607", "#8338ec","yellow", "blue"),
       size = 4,flip = F,glyph_size=3,legend_pos="bottom")

美化图形

这个图描述了不同肿瘤分期在总样本中所占的比例。

1.3 以mtcars数据库为例

waffle(counts1)

以mtcars数据库为例

这个图描述了mtcars数据集中不同气缸数在总样本中所占的比例。

2. 基本绘图(ggplot2包)

2.1 基本代码

TCGA数据为例

ggplot(counts, aes(fill=T, values=Freq)) +
  geom_waffle() +
  theme_void()

TCGA数据为例

这个华夫饼图描述了不同肿瘤分期在总样本中所占的比例。

2.2 美化图形

  • n_rows:这个参数用于设置华夫饼图中方块的行数,默认为10。
  • xlab:图表下方的文本,建议用来描述每个方块代表的含义,例如“1 sq == 1000”。
  • title:图表标题。
  • scale_fill_manual():改变颜色。
  • labels:改变标签。
  • size:这个参数用于设置方块之间分隔符的宽度,默认为2。
  • radius:这个参数用于设置方块的圆角半径,可以通过指定grid::unit()值来控制。例如,radius = unit(4, "pt")可以为方块添加圆角,从而改变方块的形状。
  • flip:如果设置为TRUE,则翻转x和y坐标,n_rows则变为n_cols,这有助于实现华夫柱状图效果。默认为FALSE。
ggplot(counts, aes(fill=T, values=Freq)) +
  geom_waffle(color = "white",radius = unit(4, "pt")) +
  scale_fill_manual(values = c("#999999", "#E69F00", "#56B4E9","red")) +
  theme_void()

美化图形

这个图描述了不同肿瘤分期在总样本中所占的比例。

2.3 以mtcars数据库为例

ggplot(counts1, aes(fill=cyl, values=Freq)) +
  geom_waffle(color = "white",row=8) +
  scale_fill_manual(values = c("#999999", "#E69F00", "#56B4E9")) +
  theme_void()+
  geom_waffle(size = 0.1)

以mtcars数据库为例

这个图描述了mtcars数据中不同气缸数在总样本中所占的比例。

2.4 分组

geom_waffle()可用于构建带有组和子组的华夫饼图。

fill参数用于按组给图表上色。

ggplot(data = data, aes(fill=subgroup, values=value)) +
  geom_waffle(color = "white", size = 1.125, n_rows = 6) +
  facet_wrap(~group, ncol=1) +
theme_void()

分组

这个华夫饼图展示了data数据集中三个不同小组内各元素的分布情况

美化图形

通过使用scale_fill_manual()函数,可以自定义华夫饼图的颜色。

ggplot(data = data, aes(fill=subgroup, values=value)) +
  geom_waffle(color = "white", size = 1.125, n_rows = 6) +
  facet_wrap(~group, ncol=1) +
theme_void() +
  scale_fill_manual(values = c("#69b3a2", "#404080", "#FFA07A", "#FFD700", "#FF6347", "#4682B4"))

美化图形

这个华夫饼图展示了data数据集中三个不同小组内各元素的分布情况。

应用场景

WaffleApp1
图 1: 华夫饼图应用

华夫饼图被用来展示不同因素对患者舒适度的影响程度。 [1]

参考文献

[1] Niehoff JH, Heuser A, Michael AE, Lennartz S, Borggrefe J, Kroeger JR. Patient Comfort in Modern Computed Tomography: What Really Counts. Tomography. 2022 May 23;8(3):1401-1412. doi: 10.3390/tomography8030113. PMID: 35645399; PMCID: PMC9149918.

[2] Wickham, H. (2016). ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York. https://ggplot2.tidyverse.org

[3] Rudis B, Gandy D (2023). waffle: Create Waffle Chart Visualizations. R package version 1.0.2,https://CRAN.R-project.org/package=waffle.

[4] Wickham H, François R, Henry L, Müller K, Vaughan D (2023).dplyr: A Grammar of Data Manipulation. R package version 1.1.4, https://CRAN.R-project.org/package=dplyr.