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

如何在R语言ggplot2绘制的条形图每个柱子中心显示对应数值

问题解决代码及调整说明

核心调整点

  • 修正图层叠加逻辑:避免多次单独对初始p对象加图层导致之前的配置丢失,统一在链式调用中完成所有图层和配置的添加
  • 匹配文本与柱子的躲避布局:给geom_text配置和geom_col一致的躲避参数,保证每个文本对应到所属柱子的水平位置,不会出现错位
  • 调整对齐参数:设置hjust = 0.5实现水平居中,根据数值正负适配垂直对齐规则,保证文本在柱子内部居中,同时避免负值的标签溢出柱子范围

完整可运行代码

# 加载所需包,如未安装先执行 install.packages("tidyverse")
library(tidyverse)

# 原始数据框
df2 <- structure(list(group = c("Suicidio", "Soledad", "Preocupacion", 
                                "Sin Amigos"), EMSE_2012 = c(6, 7.6, 6.5, -1.8), 
                      EMSE_2018 = c(15.7,13.9, 10.5, -0.7)), class = "data.frame", row.names = c(NA, -4L))

# 修正后的绘图代码
p <- df2 %>%
  pivot_longer(cols = -group) %>%
  ggplot(aes(x = group, y = value, fill = name)) + 
  # 显式设置柱子躲避宽度
  geom_col(position = position_dodge(width = 0.9)) +
  # 添加居中的数值标签
  geom_text(aes(label = value,
                # 负值的标签调整到向下延伸的柱子内部居中,正值直接居中
                vjust = ifelse(value < 0, 1.5, 0.5)),
            size = 4, hjust = 0.5,
            # 文本和柱子使用相同的躲避宽度,保证位置对齐
            position = position_dodge(width = 0.9)) +
  labs(title  = "Diferencia de medias entre hombres y mujeres. Indicadores EMSE, 2012 y 2018", 
       y = "Prevalencia",fill = "Edición", x = "Factores de Riesgo de Salud Mental")

# 输出绘图结果
p

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:27:02