You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ggplot2的geom_count图中自动添加各类观测的百分比标注

给geom_count点图批量添加百分比标注的简便方法

问题场景

你用下面的代码创建了数据集,并用geom_count画出了以点大小展示观测频率的图表,但现在想给每个点旁边加上对应的百分比数值,手动逐个加注释太繁琐,想找高效的实现方式:

# 注意:原代码里Var1、Var2的A/B/C要加引号,不然会报错
df <- tibble(ID = c(1:12), 
             Var1 = c("A", "B", "C", "C", "C", "A", "B", "B", "C", "A", "B", "C"),
             Var2 = c("B", "B", "A", "A", "C", "C", "A", "A", "B", "C", "A", "C")
)

# 绘制点大小表示频率的图表
ggplot(df, aes(x = factor(Var1, level=c('A', 'B', 'C')), 
               y = factor(Var2, level=c('A', 'B', 'C')) )) + 
  geom_count(show.legend = FALSE) + 
  labs(x = "Var1", y = "Var2") + 
  theme_bw()

生成的图表效果:
观测频率点图

省心的解决方案

不用手动一个个加注释,我们可以先提前统计每个(Var1, Var2)组合的频率和百分比,再用geom_text批量把标注加上:

1. 先统计频率和百分比

用dplyr分组统计,生成带百分比的汇总表:

library(dplyr)

# 统计每个组合的频数,再计算百分比
df_summary <- df %>%
  count(Var1, Var2, name = "freq") %>%
  mutate(pct = paste0(round(freq / sum(freq) * 100, 1), "%")) %>%
  # 保持变量层级和绘图时一致,避免位置错位
  mutate(Var1 = factor(Var1, level = c("A", "B", "C")),
         Var2 = factor(Var2, level = c("A", "B", "C")))

2. 绘图并添加百分比标注

在原ggplot代码里加入geom_text,用汇总好的数据映射标签,还可以调整标签位置避免遮挡点:

ggplot(df, aes(x = factor(Var1, level=c('A', 'B', 'C')), 
               y = factor(Var2, level=c('A', 'B', 'C')) )) + 
  geom_count(show.legend = FALSE) + 
  # 添加百分比标注,nudge_y控制标签向上偏移一点
  geom_text(data = df_summary, aes(label = pct), nudge_y = 0.15) +
  labs(x = "Var1", y = "Var2") + 
  theme_bw()

这样不管你有多少组处理,都能自动批量生成所有点的百分比标注,不用手动重复操作。


内容的提问来源于stack exchange,提问作者Lin Jing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 00:52:33