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

如何在ggplot水平条形图右侧添加百分比(df$Freq)

给ggplot水平条形图的条形末端添加百分比标签

要在水平条形图的每个条形右侧添加对应的百分比,直接使用geom_text()图层即可,以下是修改后的完整代码:

City <- c("Rome", "Paris", "Madrid", "London", "Berlin", "Ottawa")
N <- c(230, 752, 957, 473, 178, 389)
Freq <- round(proportions(N) * 100, 2)
df <- data.frame(City, N, Freq)

plt <- ggplot(df) +
  geom_col(aes(N, fct_relevel(City,
                              "Berlin",
                              "Rome",
                              "Ottawa",
                              "London",
                              "Paris",
                              "Madrid"
                              )), 
           fill = "grey75", 
           width = 0.6) + 
  # 添加百分比标签的核心代码
  geom_text(aes(x = N, 
                y = fct_relevel(City,
                                "Berlin",
                                "Rome",
                                "Ottawa",
                                "London",
                                "Paris",
                                "Madrid"
                                ),
                label = paste0(Freq, "%")),
            hjust = -0.1,  # 让标签偏移到条形右侧
            size = 3.5,    # 调整标签字号
            color = "black") +
  xlab("Total") +
  ylab("") +
  # 扩大x轴范围,避免右侧标签被截断
  scale_x_continuous(limits = c(0, 1100),
                     breaks = seq(0, 900, by = 250)) +
  theme(axis.title = element_text(size = 10, face = "bold")) +
  labs(title = "Graph - Example")

plt

关键细节说明:

  • 对齐标签:geom_text()的y轴映射要和geom_col()完全一致,确保标签与对应条形垂直对齐
  • 格式化标签:用paste0(Freq, "%")将数值转为带百分号的文本,提升可读性
  • 位置调整:hjust = -0.1控制水平对齐方式,负数让标签偏移到条形外侧;可根据需求调整这个数值改变距离
  • 避免截断:原x轴上限1000无法容纳最长条形的标签,因此将limits改为c(0, 1100),给标签留出显示空间
  • 样式优化:可通过size、color参数调整标签的大小和颜色,匹配图表整体风格

内容的提问来源于stack exchange,提问作者always.learning

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 20:12:33