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

