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

如何在R的ggplot堆叠条形图外侧添加虚拟访视占比文本?

解决方案

要在堆叠条形图外侧自动添加percent_of_virtual的文本,核心是利用原始数据集单行对应单个类别的特性,给geom_text单独指定数据源并精准定位文本位置。以下是修改后的完整可复用代码:

library(ggplot2)
library(dplyr)
library(tidyr)

# 原始数据集
dat <- data.frame(practice =c("walk in", "ltc", "emerg", "specialty"),
                   in_person=c(2463,987,3029,1200),
                  virtual = c(233,278,109,409),
                   percent_of_virtual =  c(8.6, 22, 3.5,25.4))

# 转换为长格式用于绘制堆叠条形图
dat1 <- dat[c(1,2,3)] %>%
  tidyr::pivot_longer(cols=-c(practice), names_to = "visit", values_to = "Number")

# 绘制堆叠条形图并添加百分比文本
ggplot(dat1, aes(x = practice, y = Number, fill = visit)) +
  geom_col(position=position_stack(reverse = TRUE)) +
  # 添加百分比文本:用原始dat作为数据源,定位在条形总高度外侧
  geom_text(data = dat, aes(x = practice, y = in_person + virtual, 
                            label = paste0(percent_of_virtual, "%")),
            hjust = -0.1, size = 3.5) +
  coord_flip() +
  # 扩展y轴范围,避免文本超出画布
  ylim(0, max(dat$in_person + dat$virtual) * 1.1)

关键说明

  • 数据源分离:geom_col用长格式的dat1绘制堆叠条,geom_text用原始宽格式的dat——因为每个practice对应唯一的百分比,无需拆分数据。
  • 文本定位:y = in_person + virtual直接取堆叠条形的总高度,确保文本在条形最外侧;hjust = -0.1让文本和条形保持适当间距(因coord_flip翻转了坐标轴,hjust控制水平方向的对齐)。
  • 通用适配:只要后续数据集保持「类别列+两类数值列+百分比列」的结构,就能直接复用代码生成多张图表,无需手动调整文本位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 23:07:20