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

如何在ggplot2的两个柱状图中间添加二者的百分比比值标签

问题原因

你的geom_label继承了全局aes中的x=Species映射,所以会为每个类别(每个柱子)都生成一个标签。要实现仅在两柱中间显示单个标签的效果,只需要在标注时单独指定坐标,不继承全局的x轴映射即可。

修改后可运行代码

library(tidyverse)
set.seed(1453)

# 先保存统计计算结果,方便后续调用数值
plot_data <- iris %>% 
  group_by(Species) %>% 
  summarise(Sepal.Width = mean(Sepal.Width)) %>% 
  sample_n(2)

# 提前计算比例值
ratio <- scales::percent(plot_data$Sepal.Width[2] / plot_data$Sepal.Width[1])

ggplot(plot_data, aes(x = Species, y = Sepal.Width, fill = Species)) +
  geom_col(show.legend = FALSE) + # geom_col是stat=identity的geom_bar简写
  # 单独指定标签位置,x=1.5对应两个离散柱子的中间横坐标
  geom_label(x = 1.5, y = mean(plot_data$Sepal.Width), label = ratio, show.legend = FALSE)

补充说明

你也可以用annotate函数实现相同效果,不需要处理图层映射继承的问题,写法更简洁:
把上面代码中的geom_label行替换为以下内容即可:

annotate("label", x = 1.5, y = mean(plot_data$Sepal.Width), label = ratio)

如果需要调整标签位置,修改x和y的数值即可:x越大标签越靠右,y越大标签越靠上。

内容的提问来源于stack exchange,提问作者Samet Sökel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:06:03