如何在R语言堆叠条形图右侧添加汇总信息列?
在R语言中为堆叠条形图添加右侧汇总列
需求是在堆叠条形图的右侧添加一列,展示“Do at all”(即“经常(Often)”与“偶尔(Occasionally)”的汇总值)。以下是实现步骤:
1. 创建并整理数据框
首先加载所需的tidyverse库,构建数据框并转换为ggplot适配的长格式:
# 加载所需库 library(tidyverse) # 创建数据框 data <- data.frame( event = c("与家人交谈", "捐赠物品", "在社交媒体发帖", "接受采访", "为慈善机构工作/志愿服务", "与记者交谈", "参与抗议活动"), lk1 = c(23, 20, 21, 40, 36, 40, 23), # 经常(Often) lk2 = c(10, 36, 30, 12, 12, 12, 25), # 偶尔(Occasionally) lk3 = c(36, 20, 37, 36, 40, 36, 40), # 从不(Never) lk4 = c(31, 24, 12, 12, 12, 12, 12), # 不愿透露(Prefer not to say) lk1_lk2 = c(33, 56, 51, 52, 48, 52, 48) # Do at all 汇总值 ) # 转换为ggplot所需的长格式 data_long <- data %>% pivot_longer(cols = c(lk1:lk4), names_to = "likert", values_to = "value") %>% mutate(event = factor(event, levels = rev(unique(event))))
2. 绘制堆叠条形图并添加右侧汇总列
调整绘图逻辑,修正文本位置与轴标签显示问题,确保右侧汇总列清晰展示:
ggplot(data_long, aes(x = value, y = event, fill = likert)) + # 绘制堆叠条形图 geom_bar(stat = "identity") + # 添加条形图内部的百分比标签 geom_text(aes(label = paste0(value, "%")), position = position_stack(vjust = 0.5), color = "white", size = 3) + # 添加右侧的Do at all汇总值 geom_text(data = data, aes(label = paste0(lk1_lk2, "%"), x = 105, y = event), color = "black", size = 3) + # 设置x轴为百分比格式,扩展轴范围容纳右侧文本 scale_x_continuous(labels = scales::percent_format(scale = 1), expand = c(0, 15)) + # 设置图表标题与轴标签 labs(title = "各类活动的偏好分布", x = "占比", y = "活动类型") + # 使用极简主题 theme_minimal() + # 将图例放在顶部 theme(legend.position = "top") + # 添加Do at all列的标题 geom_text(aes(x = 105, y = Inf, label = "Do at all"), hjust = 0.5, vjust = 1.5, color = "black", size = 3.5) + # 设置图例显示标签 scale_fill_discrete(labels = c("lk1" = "经常", "lk2" = "偶尔", "lk3" = "从不", "lk4" = "不愿透露"))
关键调整说明:
- 直接用原始宽格式数据
data绘制右侧汇总文本,逻辑更简洁,避免长格式数据筛选的冗余操作; - 固定右侧文本的x轴坐标为105,修正原代码中位置偏移的问题,确保文本对齐整齐;
- 为所有数值标签添加
%符号,同时修正百分比格式的scale=1参数,适配0-100的原始数据; - 扩展x轴范围,为右侧汇总列预留足够空间。
内容的提问来源于stack exchange,提问作者Theinzaw
相关产品推荐
相关产品推荐

