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

如何在ggplot绘制的图表中显示y轴最大值的坐标位置?

在ggplot图表中添加最大值坐标标注

可以通过提前计算最大值对应的坐标,再用annotate()或geom_text()将标注文本添加到图表中,实现你要的格式效果。

方法一:提前计算坐标并添加标注

# 先计算BS的最大值及对应的x坐标
max_bs <- max(as.numeric(df$BS))
max_x <- df$xval[as.numeric(df$BS) == max_bs]
# 生成指定格式的标注文本
label_text <- paste0("P(", max_x, ", ", round(max_bs, 2), ")")

# 绘制图表并添加标注
pl <- ggplot(df, aes(x=xval, y=as.numeric(BS))) + 
    geom_point(shape=21) + 
    xlab("Threshold") + 
    ylab("BS") + 
    geom_vline(xintercept=max_x, color='red') +
    geom_hline(yintercept=max_bs, color='darkblue', linetype=2) +
    # 添加坐标标注,vjust=-1让文本在点上方避免重叠
    annotate("text", x = max_x, y = max_bs, label = label_text, 
             vjust = -1, hjust = 0.5, color = "black", size = 4)

方法二:筛选最大值数据行后添加标注(适用于多个最大值的情况)

如果数据中存在多个BS最大值,这种方法可以自动为每个最大值点添加标注:

# 筛选出BS值为最大值的所有行
max_df <- df[as.numeric(df$BS) == max(as.numeric(df$BS)), ]
# 为筛选后的行生成标注文本
max_df$label <- paste0("P(", max_df$xval, ", ", round(as.numeric(max_df$BS), 2), ")")

# 绘制图表
pl <- ggplot(df, aes(x=xval, y=as.numeric(BS))) + 
    geom_point(shape=21) + 
    xlab("Threshold") + 
    ylab("BS") + 
    geom_vline(xintercept=max_df$xval, color='red') +
    geom_hline(yintercept=max(as.numeric(df$BS)), color='darkblue', linetype=2) +
    # 基于筛选后的数据集添加标注
    geom_text(data=max_df, aes(x=xval, y=as.numeric(BS), label=label),
              vjust=-1, hjust=0.5, color="black", size=4)

说明:round(max_bs, 2)用于将BS值保留两位小数,让标注更简洁;vjust=-1控制文本在数据点上方,避免和点或线条重叠,可根据实际调整数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 12:05:13