如何在分面ggplot中为最高柱顶标注对应x值(进球数)?
在分面ggplot中为每组最高柱子标注对应进球数
要实现每个分面组最高柱子顶部标注对应的进球数,只需两步:先筛选出每组概率最高的记录,再用geom_text把进球数标在柱子上方。
完整代码
library(tidyverse) # 原始数据 df <- tibble ( team = rep(c('A', 'B'), each = 5), goals = rep(1:5,2), prob = c(.10, .15, .25, .20, .15, .20, .30, .20, .10, .05)) # 筛选每个组概率最高的记录,用于标注 label_df <- df %>% group_by(team) %>% slice_max(prob, n = 1, with_ties = FALSE) # 若有多个相同最大值,只取第一个 # 绘图并添加标注 df %>% ggplot(aes(x = goals, y = prob)) + geom_col() + # 添加标注文本 geom_text(data = label_df, aes(label = goals), vjust = -0.5, # 文本向上偏移,避免和柱子顶部重叠 size = 4) + # 调整文本大小 facet_wrap(~team) + ylim(0, 0.35) # 扩展y轴上限,防止标注文本被截断
关键说明
slice_max(prob, n=1):按球队分组后,提取每组中概率最大的一行数据,确保每个分面只对应一个标注geom_text的data参数单独指定标注数据框,这样每个分面只会显示当前组的最高进球数vjust=-0.5控制文本垂直位置,让标注出现在柱子顶部上方ylim调整y轴范围,避免标注文本超出绘图区域
内容的提问来源于stack exchange,提问作者seansteele
相关产品推荐
相关产品推荐

