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

R ggplot中如何错开排布多因子的回归方程与R²值?

R ggplot分组回归方程排版调整方案

核心修改针对stat_poly_eq的标签生成与定位逻辑,完全匹配三项排版要求:

  • 移除原代码中用于上下叠放内容的atop()函数,直接拼接回归方程与R²标签实现同行显示
  • 为4个分组设置逐次递减的垂直标签位置,避免标签重叠
  • 采用绘图区相对坐标固定标签锚点,将所有方程统一放在绘图区域右上角

注意:stat_poly_eq属于ggpmisc包,运行代码前请先安装并加载该包。

修正后完整可运行代码:

library(ggplot2)
library(ggpmisc)

set.seed(111)
var <- rep(c("SP1","SP2","AB1","AB2"), times = 5)
var.val <- rnorm(20,5,1)
level <- rep(c(100,200,300,400), each = 5)

df <- data.frame(var, var.val, level)
df <- df[order(-level),]
# 若标签顺序和分组不匹配,可手动指定因子水平顺序
# df$var <- factor(df$var, levels = c("AB1", "AB2", "SP1", "SP2"))

ggplot(df, aes(x = level, y = var.val, col = var, group = var, linetype = var)) + 
  geom_point(aes(fill = var), colour="white",pch=21, size=4, stroke = 1,
             alpha = 0.7, data = df[df$var %in% c("SP1", "SP2"),]) +
  theme_classic() + 
  geom_smooth(data = df[df$var %in% c("SP1", "SP2"),],
              method = "lm", formula = y ~ x, alpha = 0.2) +
  geom_smooth(data = df[!df$var %in% c("SP1", "SP2"),],
              method = "lm", formula = y ~ x, se = FALSE) +  
  scale_linetype_manual(values = c("dotdash", "dashed","solid", "solid")) + 
  scale_colour_manual(values = c("black","black","red","blue")) + 
  stat_poly_eq(
    formula = y ~ x,
    # 方程与R²同行显示,中间加空格分隔
    aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~~")),
    parse = TRUE,
    size = 3,
    # 内置快捷参数自动对齐绘图区右侧
    label.x = "right",
    # 4组标签逐行排布,垂直位置依次递减避免重叠
    label.y = c(0.95, 0.90, 0.85, 0.80)
  )

参数说明:

  • label.x = "right"是ggpmisc内置的快捷定位参数,自动对齐绘图区右侧,比手动写比例值适配性更好
  • label.y的四个数值为绘图区的相对垂直比例(0为底部,1为顶部),四组标签从上到下依次排布,可根据实际绘图大小调整间距
  • 若出现标签和分组对应错位,先通过factor()指定var的因子水平顺序,再对应调整label.y的数值顺序即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 02:48:32