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

如何在ggplot2绘制的线性回归分面图中标注回归系数与p值

你已经完成了回归系数和p值的预计算,只需要将计算结果和分面变量做匹配,用geom_text()层添加标注即可,完整可运行的修改后代码如下:

library(olsrr)
library(tidyverse)
library(reshape2)
data(surgical)

## 回归计算
pre1 <- setdiff(names(surgical), c("y", "pindex"))
mod_dres <- NULL
for (j in pre1) {
  model  <- lm(y  ~  pindex + get(j), data = surgical)
  bmodel <- broom::tidy(model)
  bmodel$term[3] <- j
  bmodel <- bmodel[3,]
  mod_dres <- rbind(mod_dres, bmodel)
}

### 新增:处理回归结果生成标注文本
mod_dres <- mod_dres %>%
  mutate(
    coef_label = round(estimate, 2),
    p_label = case_when(
      p.value < 0.001 ~ "p < 0.001",
      TRUE ~ paste0("p = ", round(p.value, 3))
    ),
    label = paste0("β = ", coef_label, "\n", p_label),
    variable = term # 匹配绘图数据集的分面字段
  )

## 重塑绘图数据集
pre1.plot = melt(surgical[,-c(2)], id.vars='y') %>% 
  dplyr::filter(variable %in% mod_dres$term) 

## 绘图
ggplot(pre1.plot) +
  geom_jitter(aes(value,y, colour=variable), 
              colour="darkorange", size = 3) + 
  geom_smooth(aes(value,y, colour=variable), 
              method=lm, se=FALSE, colour="darkorange") +
  # 新增:添加回归系数和p值标注
  geom_text(data = mod_dres,
            aes(x = Inf, y = Inf, label = label),
            hjust = 1.1, vjust = 1.1,
            size = 4, fontface = "bold") +
  theme_minimal() +
  theme(axis.title = element_text(size = 16,face="bold", colour = "black"),
        axis.text = element_text(size = 16,face="bold", colour = "black"),
        axis.line = element_line(colour='black'),
        axis.ticks = element_line(colour='black'),
        plot.title = element_text(hjust = 0.5,size=18,face="bold"),
        legend.position = "bottom",
        legend.title = element_text(color = "Black", size = 9, face = "bold"),
        legend.text=element_text(color = "Black", size = 9, face = "bold"),
        strip.text.x = element_text(size = 16,face="bold", colour = "black")) +
  labs(x = "value",title = " ") +
  facet_wrap(~variable, scales="free_x",nrow = 2, ncol = 4) + 
  theme(panel.background = element_rect(fill = "white", colour = "black"),
        strip.background = element_rect(fill = "white", colour = "black"),
        legend.key = element_blank(),
        legend.title = element_blank())

补充说明:

  • 标注默认放在每个分面的右上角,如需调整位置,可修改hjust、vjust参数,要放在左上角可将x改为-Inf,同时设置hjust = -0.1
  • 系数、p值的小数位数和显示格式,可根据需求修改mutate部分的格式化规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 23:45:00