如何在ggplot图表的副标题中显示回归线方程?
问题:将ggplot回归线方程移至副标题
现有批量生成水位过程线的代码,目前通过stat_regline_equation在图表内显示连续数据的回归线方程,需求是把该方程添加到图表副标题中,与现有副标题内容合并。
解决方案
可以通过提前计算回归方程并将其字符串拼接至副标题参数实现,步骤如下:
提取回归线方程字符串:
- 方法一:手动基于线性回归模型系数构造方程
- 方法二:利用
ggpmisc包(stat_regline_equation所属包)直接生成与图表内一致格式的方程文本
拼接副标题内容:将提取到的方程字符串与原副标题信息合并,传入
ggtitle()的subtitle参数
修改后的代码示例
library(ggplot2) library(ggpmisc) # stat_regline_equation所属包 # 计算并提取回归线方程文本(与stat_regline_equation输出格式一致) eq_text <- stat_regline_equation(data = cont, aes(x, y), output.type = "text")$label[1] # 绘制图表 p <- ggplot() + geom_line(data = cont, aes(x, y), color = "cyan4", size = 0.5) + geom_point(data = disc, aes(x, y), color = "gray22", shape = 8, size = 1.5, stroke = 0.7) + geom_smooth(data = cont, aes(x, y), method = lm, se = FALSE, col = 'red', size = 1) + stat_poly_line(data = cont, aes(x, y)) + # 移除原有的stat_regline_equation,因为方程已移至副标题 ggtitle( title = paste(station, longName), subtitle = paste("Well depth:", totalDepth, "ft", county, " | ", eq_text) ) + xlab("Date") + ylab("Depth to water (ft)") + scale_y_reverse() + theme( axis.title.x = element_text(color = "gray40", face = "bold", size = 11), axis.title.y = element_text(color = "gray40", face = "bold", size = 11), axis.text = element_text(size = 12) ) print(p) dev.off()
补充说明
- 如果不想依赖
ggpmisc包,可手动构造方程:lm_model <- lm(y ~ x, data = cont) eq_text <- paste0("y = ", round(coef(lm_model)[2], 3), "x + ", round(coef(lm_model)[1], 3)) - 修正了原代码中
ggtitle()的语法错误(原代码多了一个右括号) - 需确保
cont数据框中的x(日期)和y(水位深度)变量映射正确
内容的提问来源于stack exchange,提问作者Blake Burkard
相关产品推荐
相关产品推荐

