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

如何在ggplot2的单个堆叠条形图各分段中垂直居中显示数值?

单个堆叠条形图的文本位置修正方案

核心问题排查

你的代码存在两个关键问题:

  • 分组逻辑错误:计算文本位置时按Variable分组,导致每个变量单独计算累计值,无法匹配堆叠的整体顺序。
  • x轴映射错误:x = variable(拼写错误,应为Variable)会将每个变量拆分为独立条形,而非堆叠成单个条形。

修正后的完整代码

1. 数据预处理

library(tidyverse)

# 宽表转长表,并添加统一的x轴类别
sk <- sk %>% 
  pivot_longer(cols = c(A, B, C, D, E, F), 
               names_to = "Variable", values_to = "Value") %>%
  mutate(x_group = "总览") %>% # 固定x轴为单个类别
  group_by(x_group) %>%
  mutate(
    # 计算每个堆叠分段的中间位置
    cumulative = cumsum(Value) - Value / 2,
    # 保持变量的原始堆叠顺序,避免颠倒
    Variable = fct_inorder(Variable)
  ) %>%
  ungroup()

2. 绘图代码

ggplot(data = sk, aes(x = x_group, y = Value, fill = Variable)) +
  geom_bar(position = "stack", stat = "identity") +
  geom_text(aes(y = cumulative, label = Value), size = 4) +
  xlab("") + 
  ylab("") +
  theme_minimal() +
  theme(legend.position = "right")

关键调整说明

  • 新增x_group字段,确保所有变量都映射到同一个x轴类别,形成单个堆叠条形。
  • 按x_group分组计算cumulative,累计值基于整个堆叠的顺序,能精准定位每个分段的中间位置。
  • fct_inorder函数强制保持变量的原始顺序,解决文本和分段颠倒的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:35:15