1. 打开文件
#读取scatter_plot2.csv
data<-read.csv("G:/scatter_plot2.csv",row.names = 1)
#画一个散点图大致看看mcode于degree的关系
data
2. 用ggplot2画散点图
library(ggplot2) #加载ggplot2包
ggplot(data,aes(x=Degree,y=MCODE_Score)) + geom_point(size=3,shape=19)
分组散点图
#以颜色区分
ggplot(data,aes(x=Degree,y=MCODE_Score,colour=sex)) + geom_point(size=3,shape=19)
#以形状区分
ggplot(data,aes(x=Degree,y=MCODE_Score,shape=sex)) + geom_point(size=3)
解决点覆盖
当点的密度大时,我们可以改变点的透明度来区分各个点。当然我们可以使用bin的方法来区分,这种方法是把点的形状设定为长方形,密度越大的长方形区域越透明。
ggplot(data,aes(x=Degree,y=MCODE_Score,colour=sex)) +geom_point(alpha=.1)
ggplot(data,aes(x=Degree,y=MCODE_Score,colour=sex)) + geom_point(alpha=.01)
ggplot(data,aes(x=Degree,y=MCODE_Score,colour=sex)) + stat_bin2d()
当其中的一个或者两个变量为离散型数据时,也会导致覆盖的问题。我们可以使用jitter方法和box的方法。
ggplot(data,aes(x=Degree,y=MCODE_Score))+geom_point()
ggplot(data,aes(x=Degree,y=MCODE_Score))+geom_point(position="jitter")
#position="jitter"等价于geom_jitter,即下面的方法
ggplot(data,aes(x=Degree,y=MCODE_Score))+geom_point(position=position_jitter(width=.5, height=0))
ggplot(data,aes(x=Degree,y=MCODE_Score))+ geom_boxplot(aes(group=Time))
3.增加拟合的回归线
#利用ggplot函数画图
#添加拟合直线必须定义method=lm否则就会默认是method=loss了
#默认的method是loess
p <- ggplot(data,aes(x=Degree,y=MCODE_Score)) + geom_point(shape=19) + xlab("Degree") + ylab("MCODE_Score")+geom_smooth(method = lm)
#该回归直线的置信区间默认的置信度是95%,也可以对其进行修改,99%的置信度
p0.99 <- ggplot(data,aes(x=Degree,y=MCODE_Score)) + geom_point(shape=19) + xlab("Degree") + ylab("MCODE_Score")+geom_smooth(method = lm,level=0.99)
#也可以不显示置信区间
p0 <- ggplot(data,aes(x=Degree,y=MCODE_Score)) + geom_point(shape=19) + xlab("Degree") + ylab("MCODE_Score")+geom_smooth(method = lm,se=FALSE)
示例为95%置信区间的线性回归图,99%置信区间的线性回归图和不加置信区间的线性回归图
4. 计算method=lm的简单线性回归相关参数k值,b值,以及r平方值
#计算method=lm的简单线性回归
#线线回归分析
data.lm<-lm(data$MCODE_Score~data$Degree,data=data)
#线性回归表达式编辑,截距是coef(data.lm)[1],斜率是coef(data.lm)[2])
#此处预先定义是为后续画图需要添加回归曲线公式文本
formula <- sprintf("italic(y) == %.2f %+.2f * italic(x)", #这个就是y=b+kx的表达式的写法
round(coef(data.lm)[1],4),round(coef(data.lm)[2],4)) #这个就是对截距和斜率取近似值。
r2 <- sprintf("italic(R^2) == %.2f",summary(data.lm)$r.squared)
labels <- data.frame(formula=formula,r2=r2,stringsAsFactors = FALSE)