如何获取geom_col生成柱形的位置以设置geom_rect的xmin/xmax参数
核心原理
ggplot2中离散x轴的每个类别会默认映射为从1开始的整数坐标,geom_col默认柱宽为0.75,因此每个柱子的左右边界计算规则为:
- xmin = 类别对应整数位置 - 柱宽/2
- xmax = 类别对应整数位置 + 柱宽/2
实现方案
方案1:自动映射边界(全量柱形加标注推荐)
不需要手动计算每个类别的位置,直接在aes中通过离散x轴转数值的方式自动适配,新增类别也无需修改逻辑:
library(tidyverse) df<-tribble( ~Type,~Value, "X", 23, "Y", 33 ) # 统一指定柱宽,和geom_col的width参数保持一致即可 col_width <- 0.75 df %>% ggplot(aes(x=Type,y=Value))+ geom_col(width = col_width)+ geom_rect( aes( xmin = as.numeric(Type) - col_width/2, xmax = as.numeric(Type) + col_width/2, ymin = Value * 1.2, ymax = Value * 1.4 ), fill = "red", alpha = 0.3, inherit.aes = TRUE )
方案2:手动指定边界(部分柱形加标注推荐)
如果只需要给指定柱子加标注,直接对应类别位置写参数即可,比如仅给X类(对应x轴位置1)加矩形标注:
df %>% ggplot(aes(x=Type,y=Value))+ geom_col()+ geom_rect( xmin = 1 - 0.75/2, xmax = 1 + 0.75/2, ymin = 23*1.2, ymax = 23*1.4, fill = "blue", alpha = 0.3 )
注:如果你手动修改了
geom_col的width参数,需要将上述计算中的0.75替换为你实际设置的柱宽数值,保证矩形和柱子宽度对齐。
内容的提问来源于stack exchange,提问作者GeoffRussell
相关产品推荐
相关产品推荐

