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

如何用ggplot和dplyr将完成项目的绝对计数条形图改为比例图

各年龄组项目完成比例条形图实现方案

方法一:先预处理数据再绘图

先通过dplyr分组计算每个年龄组的完成比例,再用ggplot绘制:

library(dplyr)
library(ggplot2)

# 计算各年龄组的完成比例
processed_data <- test %>%
  group_by(agecat) %>%
  summarise(
    completion_rate = mean(retain_yn == 1)  # 0/1变量的均值即为完成比例
  )

# 绘制比例图
ggplot(processed_data, aes(x = agecat, y = completion_rate)) +
  geom_bar(stat = "identity", fill = "#4285F4") +
  # 添加百分比标签
  geom_text(aes(label = scales::percent(completion_rate)), vjust = -0.2, size = 3) +
  # 设置y轴为百分比格式,扩展范围防止标签被截断
  scale_y_continuous(labels = scales::percent, limits = c(0, 1.1)) +
  labs(
    x = "年龄组",
    y = "项目完成比例",
    title = "各年龄组项目完成情况比例"
  ) +
  theme_bw()

方法二:直接在ggplot中计算比例(无需单独预处理)

利用stat_summary直接在绘图时计算每个组的完成比例,适合快速绘图:

library(ggplot2)
library(scales)

ggplot(test, aes(x = agecat, y = retain_yn)) +
  # 用stat_summary计算并绘制比例条形
  stat_summary(fun = mean, geom = "bar", fill = "#34A853") +
  # 添加百分比标签
  stat_summary(
    fun = mean,
    geom = "text",
    aes(label = percent(..y..)),
    vjust = -0.2,
    size = 3
  ) +
  scale_y_continuous(labels = percent, limits = c(0, 1.1)) +
  labs(
    x = "年龄组",
    y = "项目完成比例",
    title = "各年龄组项目完成情况比例"
  ) +
  theme_minimal()

关键说明

  • 由于retain_yn是0(未完成)和1(完成)的二元变量,对每个年龄组取均值就等于该组的完成比例,这是简化计算的核心技巧。
  • scales::percent()函数用于将小数转换为百分比格式,提升图表可读性。
  • 调整vjust参数可以控制标签在条形上方的位置,limits = c(0, 1.1)扩展y轴范围,避免标签被图表边界截断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:39:41