基于指定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
相关产品推荐
相关产品推荐

