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

如何在ggplot2金字塔图中添加带%且无负号的标签?

金字塔图标签格式修正方案

要实现移除标签负号、添加%符号的需求,只需修改geom_text的标签生成逻辑,并调整文本位置避免遮挡,具体操作如下:

核心修改内容

  • 用abs(Value)去除负号,通过paste0()拼接%生成目标标签文本
  • 添加hjust参数,根据性别调整文本对齐方向,让标签显示在柱子外侧

修改后的完整代码

library(tidyverse)
library(plotly)

# 绘制金字塔图
gg_pop_hisp = ggplot(pop_hisp_df, aes( x = forcats::as_factor(age_group), y = Value, fill = Type)) +
  geom_bar(data = subset(pop_hisp_df, Type == "Females"), stat = "identity") + 
  # 修正标签格式与位置
  geom_text(aes(label = paste0(abs(Value), "%"), 
                hjust = ifelse(Type == "Males", 1.1, -0.1))) + 
  geom_bar(data = subset(pop_hisp_df, Type == "Males"), stat = "identity") +
  scale_y_continuous(limits=c(-20,20),
                     breaks=c(-15,-10,0,10,15),
                     labels=paste0(c(15,10,0,10,15), "%")) +
  scale_fill_manual(name = "", values = c("Females"="#FC921F", "Males"="#149ECE"), labels = c("Females", "Males")) +
  ggtitle("HISPANIC POPULATION BY GENDER AND AGE GROUP") +
  labs(x = "AGE GROUPS", y = "PERCENTAGE POPULATION", fill = "Gender") +
  theme_minimal() +
  theme(legend.position="bottom") +
  coord_flip()  

# 转换为交互式图表
ggplotly(gg_pop_hisp) %>% 
  layout(
    legend = list(
      orientation = 'h', x = 0.3, y = -0.3, 
      title = list(text = '')
    )
  )

说明

  1. 标签格式化:paste0(abs(Value), "%")一步完成“取绝对值去负号+拼接%符号”的需求,替代原代码中错误的label = Value, "%"写法。
  2. 文本位置优化:hjust = ifelse(Type == "Males", 1.1, -0.1)让男性标签(y值为负)显示在柱子左侧,女性标签显示在柱子右侧,避免被柱子遮挡,提升可读性。
  3. 坐标轴保持:原代码中scale_y_continuous的坐标轴标签格式已经正确,无需修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:27:35