R语言 向分面数据添加公式与拟合曲线

数据

R语言 向分面数据添加公式与拟合曲线_第1张图片

源代码:

library(ggplot2)
data<-read.csv("D:\\rwork\\tiaocan_xiugai.csv",header = T)  #header = Falese的意思
dt<-as.data.frame(data)
dt2<-dt


#函数
lm_labels<-function(dat){
  count1<-dat$count1
  degree<-dat$degree
  mod<-nls(count1 ~ a*degree^b, start = list(a=2, b= 1.5))
  formula<-sprintf("italic(y)==%.3f*italic(x)^%.3f",
                   round(coef(mod)[1],3),round(coef(mod)[2],3))
  a=0
  b=0
  for(i in 1:15){
    ymean=mean(count1)
    a=a+(fitted(mod)[i]-ymean)^2
    b=b+(count1[i]-ymean)^2
  }
  r=a/b
  #r<-cor(dat$count1,dat$degree)
  r2<-sprintf("italic(R^2)==%.3f",r)
  data.frame(formula=formula,r2=r2,stringAsFactors=FALSE)
}
#载入包
library(plyr)
labels<-ddply(dt2,"fenlei2",lm_labels)
labels$y<-c(31,39,49)
labels$yr<-c(28,35,45)

p<-ggplot(dt2,aes(x=dt$degree,y=dt$count1))+geom_point()+geom_smooth(method="nls",formula=y ~ a*x^b, start = list(a=2, b= 1.5),se=F)
p<-p+facet_wrap(~fenlei2,nrow=1,scales="free_y")
p<-p+geom_text(x=6,aes(label=formula,y=y),data=labels,parse=TRUE,hjust=0,size=8)
p<-p+xlab("degree")+ylab("count")
p<-p+geom_text(x=6.5,aes(label=r2,y=yr-1),data=labels,parse=TRUE,hjust=0,size=8)
p+theme(strip.text=element_text(face="bold",size=rel(1.2)),
        strip.background=element_rect(fill="lightblue",colour="black",size=1))

结果图:

R语言 向分面数据添加公式与拟合曲线_第2张图片



你可能感兴趣的:(data)