ggplot2绘制散点图(拟合曲线,添加R方和回归方程)

在进行回归分析之前,通常要画散点图看两组的相关趋势,并添加拟合曲线,本文就描述一下,如何使用ggplot2来绘制散点图,并添加拟合曲线及其95%CI,最后加上R方值和回归方程。

本文使用iris数据集进行演示(多变量数据,包含不同的因子),首先我想通过构建一个函数,可以生成一个数据框,包括R平方,截距和系数(方便ggplot2作图),这样就可以将多个变量两两之间的回归方程展示在一个图中。

构建函数:

#函数作用:输入一个数据框,输入两列的列名以及因子列的列名,求不同因子(分组)之间的回归系数

例如iris数据集:

这里我输入两列的列名(例如Sepal.Length和Sepal.Width),再输入因子列,也就是最后一列,就可以分别得到三种不同的种属中Sepal.Length和Sepal.Width的相关系数。


Add_R <- function(dataframe,x,y,factor){   #四个参数,数据框,第一列和第二列的列名,因子列的列名

  cor <- data.frame()

    dataframe[,factor] <- as.factor(dataframe[,factor])

    lev <- levels(dataframe[,factor])

    for (i in c(1:length(lev))) {

      name <- lev[i]

      data <- dataframe[which(dataframe[,factor] == name),]

      lm <- summary(lm(data,formula = data[,y]~data[,x]))

      r_squared <- round(lm$r.squared,2)

      inter <- round(lm$coefficients[1,1],2)

      coefficients <- round(lm$coefficients[1,2],2)

      max_x <- max(data[,x])      #给出图中添加文本的位置

      max_y <- max(data[,y])

      if(inter>0){

        eq <- substitute(""~R^2~"="~a~","~hat(y)~" = "~b%.%x+c~ "",list(a = r_squared,b = coefficients,c = inter))   #非常重要的一步,把公式打包,在通过下面的as.charaster来把公式以字符串的形式表示,因为geom_text这个函数中的label参数只接受字符串类型的数据

      }

      else{

       inter <- abs(inter)

        eq <- substitute(""~R^2~"="~a~","~hat(y)~" = "~b%.%x-c~"",list(a = r_squared,b = coefficients,c = inter))

      }

      cor <- rbind(cor,cbind(rsqua = r_squared,coef = coefficients,intercept = inter,max_x = max_x,max_y = max_y,exp = ""))

      exp <- as.character(as.expression(eq))

      cor$exp[i] <- exp

      row.names(cor)[i] <- name

    }

  for (i in c(1:5)){

    cor[,i] <- as.numeric(cor[,i])    #转换为数值向量

  }

  return(cor)

}


df <- Add_R(iris,"Sepal.Length","Sepal.Width","Species")   #求这两列不同种属的相关性

df

开始绘图

library(ggplot2)  #加载包

ggplot(iris,aes(Sepal.Length,Sepal.Width))+   #和上面函数输入的要对应(df这个数据框)

  geom_point(size = 3,aes(color = Species,shape = Species,fill = Species))+

  geom_smooth(aes(color = Species,fill = Species),method = "lm",level = 0.95,formula = y~x,linetype = 2,alpha = 0.2)+

  scale_color_manual(values = c("slateblue2","blue4","tomato2"))+

  geom_text(data = df,aes(max_x,max_y,label = exp),vjust = 0,nudge_y = 0.1,size = 5,parse = T,color = c("slateblue2","blue4","tomato2"),)+      #注意parse = T参数,这个一定要等于T,才能把字符串类型的公式,以公式的形式表达。

  coord_cartesian(xlim = c(4,9),expand = F,ylim = c(2,4.7))+

  theme(panel.background = element_blank(),

        panel.grid.major.y = element_line(colour = "grey",linetype = 2),

        axis.line = element_line(colour = "black",size = rel(2),arrow = arrow(angle = 30,length = unit(0.1,"inches"))),

        axis.title.y = element_text(size = rel(2),hjust = 0.5),

        axis.title.x = element_text(size = rel(2),hjust = 0.5),

        axis.text.x = element_text(size = rel(2),hjust = 1),

        axis.text.y = element_text(hjust = 1,size = rel(2)),

        axis.ticks = element_line(size = rel(1.3)),

        plot.title = element_text(size = rel(1.8)),

        plot.margin = margin(15,9,9,30))


最终成果:


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348

推荐阅读更多精彩内容