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
相关产品推荐
相关产品推荐

