前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言ggplot2散点图添加拟合曲线和回归方程的简单小例子

R语言ggplot2散点图添加拟合曲线和回归方程的简单小例子

作者头像
用户7010445
发布2021-07-30 10:44:50
25.2K0
发布2021-07-30 10:44:50
举报
文章被收录于专栏:小明的数据分析笔记本

本篇推文来自于公众号读者的投稿

最近在画散点图的时候使用lm函数进行线性回归拟合之后,想将拟合的方程与R2加入到绘制的图片中。在百度中翻了半天,终于在一个外国网站上找到了方法。下面我把这个方法介绍给大家。

参考链接是

https://stackoverflow.com/questions/7549694/add-regression-line-equation-and-r2-on-graph

首先是模拟一份数据集
代码语言:javascript
复制
df<-data.frame(x = c(1:100))
df$y <- 2 + 3 * df$x + rnorm(100, sd = 40)
head(df)
ggplot2基本的散点图并添加拟合曲线
代码语言:javascript
复制
library(ggplot2)
p <- ggplot(data = df, aes(x = x, y = y)) +
  geom_smooth(method = "lm", se=FALSE, 
              color="black", formula = y ~ x) +
  geom_point()
p

题外话:有读者在公众号留言说R语言做出来的图有锯齿,应该是在Rstudio那个图形显示界面就是这个,如果导出图片后就会变得清楚了,这里为什么在Rstudio的图形显示界面会不清楚 我也不知道

如果要显示95%置信区间,可以将se参数的FALSE改为TRUE
代码语言:javascript
复制
p <- ggplot(data = df, aes(x = x, y = y)) +
  geom_smooth(method = "lm", se=TRUE, 
              color="black", formula = y ~ x) +
  geom_point()+
  theme_bw()
p
添加拟合方程和R2

这里他的办法是自定义了一个函数,这个函数看起来还挺复杂的,先不用管这个函数的意思了 ,直接复制过来用就可以了

代码语言:javascript
复制
lm_eqn <- function(df){
  m <- lm(y ~ x, df);
  eq <- substitute(italic(y) == a + b %.% italic(x)*","~~italic(r)^2~"="~r2, 
                   list(a = format(unname(coef(m)[1]), digits = 2),
                        b = format(unname(coef(m)[2]), digits = 2),
                        r2 = format(summary(m)$r.squared, digits = 3)))
  as.character(as.expression(eq));
}

p1 <- p + 
  geom_text(x = 25, y = 300, 
            label = lm_eqn(df), parse = TRUE)
p1
第二种方法 现成的R包 ggpmisc

加载R包,模拟数据集

代码语言:javascript
复制
library(ggplot2)
library(ggpmisc)

df <- data.frame(x = c(1:100))
df$y <- 2 + 3 * df$x + rnorm(100, sd = 40)
head(df)

这里添加拟合方程用到的是 stat_poly_eq()这个函数

代码语言:javascript
复制
library(ggplot2)
library(ggpmisc)

df <- data.frame(x = c(1:100))
df$y <- 2 + 3 * df$x + rnorm(100, sd = 40)
head(df)

my.formula <- y ~ x
ggplot(data = df, aes(x = x, y = y)) +
  geom_smooth(method = "lm", se=FALSE, 
              color="black", formula = my.formula) +
  stat_poly_eq(formula = my.formula, 
               aes(label = paste(..eq.label..,
                                 ..rr.label..,
                                 sep = "~~~")), 
               parse = TRUE) +         
  geom_point()
最后是调整细节进行美化
  • 点的大小与颜色,透明度
  • 拟合曲线相关颜色,粗细与填充
  • 去掉背景网格线

代码

代码语言:javascript
复制
ggplot(data = df, aes(x = x, y = y)) +
  geom_smooth(method = "lm", 
              se=FALSE, color="black", 
              formula = my.formula) +
  stat_poly_eq(formula = my.formula, 
               aes(label = paste(..eq.label.., 
                                 ..rr.label.., 
                                 sep = "~~~")), 
               parse = TRUE) +         
  geom_point(size=4,
             alpha=0.7,
             color="#fe654c")+
  coord_cartesian(ylim = c(0,320),
                  xlim = c(0,105))+
  scale_y_continuous(breaks = c(0,100,200,300))+
  scale_x_continuous(breaks = c(0,25,50,75,100,105))+#x轴比上个图多个105
  theme_bw()+
  geom_smooth(method = "lm",
              color="#558ebd",
              fill="lightgray",
              alpha=.7,
              size=0.8,se=T,
              formula = y~x)+
  theme(panel.grid = element_blank())

最终出图

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小明的数据分析笔记本 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本篇推文来自于公众号读者的投稿
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档