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

基于指定data.frame绘制分组柱状图并添加柱顶百分比

R实现分组柱状图并添加柱顶百分比标签

步骤1:准备数据并转换格式

先把你的数据导入R,再将宽格式数据转为ggplot2适配的长格式:

# 加载依赖包
library(ggplot2)
library(tidyr)

# 创建数据框
df <- data.frame(
  `Age group` = c("0_17", "18_24", "25_30"),
  Hospital_A = c(12.69, 2.23, 22.3),
  Hospital_B = c(3.6, 4.5, 12.4),
  Hospital_C = c(9.5, 6.6, 10.2)
)

# 转换为长格式(ggplot分组绘图的标准格式)
df_long <- pivot_longer(df, 
                        cols = starts_with("Hospital_"),
                        names_to = "Hospital",
                        values_to = "Percentage")

步骤2:绘制分组柱状图并添加柱顶标签

用ggplot2生成分组柱形图,同时在柱顶添加四舍五入后的百分比数值:

ggplot(df_long, aes(x = `Age group`, y = Percentage, fill = Hospital)) +
  # 绘制分组柱形,设置柱子间距避免重叠
  geom_col(position = position_dodge(width = 0.9)) +
  # 添加柱顶标签,四舍五入为整数;若需保留1位小数,改为round(Percentage, 1)
  geom_text(aes(label = round(Percentage, 0)),
            position = position_dodge(width = 0.9),
            vjust = -0.5,  # 标签置于柱子上方,避免遮挡
            size = 3.5) +
  # 设置坐标轴与图例样式
  ylab("百分比") +
  theme_minimal() +
  theme(legend.position = "top")

关键代码说明

  • pivot_longer:把多列的医院数据合并为「医院类别」和「对应百分比」两列,满足分组绘图的数据结构要求。
  • position_dodge(width = 0.9):让同一年龄组的医院柱子并排展示,不会重叠。
  • vjust = -0.5:调整标签在柱子顶部的位置,避免与柱身重叠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 13:15:13