如何在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
相关产品推荐
相关产品推荐

