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

如何从ggplot回归图中提取分组数据的斜率并整理为数据框

提取分组回归斜率并整理为目标数据框

直接从ggplot对象中提取斜率并不高效,更可靠的方式是对分组数据直接执行线性回归分析,直接获取斜率后整理成所需格式:

核心代码实现

library(dplyr)

# 按cyl分组计算回归斜率并格式化结果
slope_df <- mtcars %>%
  group_by(cyl) %>%
  summarise(
    Slope = coef(lm(hp ~ disp, data = cur_data()))[["disp"]],
    .groups = "drop"
  ) %>%
  rename(Cyl = cyl) %>%
  mutate(Slope = round(Slope, 3))

# 查看结果
slope_df

代码说明

  • group_by(cyl):按气缸数对数据分组
  • lm(hp ~ disp, data = cur_data()):对每组数据执行hp关于disp的线性回归
  • coef(...)[["disp"]]:提取回归方程中自变量disp对应的系数(即斜率)
  • rename()和mutate(round(...)):调整列名并将斜率保留3位小数,匹配目标格式

运行后输出结果:

# A tibble: 3 × 2
    Cyl Slope
  <dbl> <dbl>
1     4  0.339
2     6 -0.300
3     8  0.089

备选方案:从ggplot对象中提取(不推荐)

如果一定要从ggpmisc生成的ggplot对象中提取斜率,可通过获取图层计算数据后用正则表达式提取,但该方法依赖图层顺序,稳定性较差:

library(ggplot2)
library(ggpmisc)
library(stringr)

p <- ggplot(mtcars, aes(x=disp, y=hp, color = factor(cyl))) +
  geom_point() +
  stat_poly_line() + 
  stat_poly_eq(use_label(c("eq")))

# 获取stat_poly_eq图层的计算数据(i值需根据实际图层顺序调整)
eq_data <- layer_data(p, i = 3)

# 从方程字符串中提取斜率
eq_data %>%
  mutate(
    Cyl = as.numeric(str_remove(colour, "factor\\(cyl\\)")),
    Slope = str_extract(eq_label, "(?<=\\+|-)\\d+\\.\\d+") %>% as.numeric()
  ) %>%
  select(Cyl, Slope)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:20:14