散点图基础2
1. 拟合lm、loess、分组
library(ggplot2)
library(gcookbook)
sp<-ggplot(heightweight,aes(x=ageYear,y=heightIn))
#线性拟合lm
sp+geom_point()+stat_smooth(method=lm) #默认95置信区间
sp+geom_point()+stat_smooth(method=lm,level = 0.99)#level设置置信区间
sp+geom_point()+stat_smooth(method=lm,se=FALSE)#se=false,不会添加置信区间
sp+geom_point()+stat_smooth(method=lm,se=FALSE,colour="red",linetype="dashed",size=2)#colour修改拟合线的颜色,线形(linetype),粗细
#多项式拟合loess
sp+geom_point()+stat_smooth(method=loess)
#logis回归 :不懂 见p77
#分组
sp<-ggplot(heightweight,aes(x=ageYear,y=heightIn,colour=sex))+
geom_point()+
scale_color_brewer(palette = "Set1")
sp+stat_smooth()
sp+stat_smooth(method = lm,fullrange = TRUE)#fullrange可以将拟合线绘制到右边界。loess不可以
2. 创建新的拟合函数
#lm建一个函数,predict()计算预测值
library(gcookbook)
model<-lm(heightIn~ageYear+I(ageYear^2),heightweight)
model
xmin<-min(heightweight$ageYear)
xmax<-max(heightweight$ageYear)
a<-data.frame(ageYear=seq(xmin,xmax,length.out = 20))
a
a$heightIn<-predict(model,a)
a
sp<-ggplot(heightweight,aes(x=ageYear,y=heightIn))+geom_point(colour="grey40")
sp+geom_line(data=a,size=1)
summary(model)#查看参数值
#annotate()手动添加标签
sp+annotate("text",label="r^2=0.42",x=16,y=55)
##3. 添加标签
#添加标签:手动annotate(),自动geom_text()
library(gcookbook)
cdata<-subset(countries,Year==2009&healthexp>2000)
cdata
sp<-ggplot(cdata,aes(x=healthexp,y=infmortality))+geom_point()
sp+annotate("text",label="Canada",x=4350,y=5.4)+annotate("text",label="USA",x=7400,y=6.8)
#把因子型或字符串型赋值给label,默认将标签中心置于xy坐标位置,默认size=5
sp+geom_text(aes(label=Name),size=4)
#对标签上下左右调整,vjust=0,文本基线会与数据点对齐,vjust=1,文本顶部与数据点对齐。hjust=0,左对齐,hjust=1,右对齐。或者对x,y增加或者减小。
sp+geom_text(aes(label=Name),size=4,hjust=0,vjust=1)
sp+geom_text(aes(x=healthexp+100,y=infmortality+0.2,label=Name),size=4)
#给几个点自动添加标签:增加一列只包含这几个点的新的标签列 .%in%判断前面一个向量内的元素是否在后面一个向量中,返回布尔值。
cdata$name1<-cdata$Name
abx<-cdata$name1 %in% c("Canada","Ireland","Japan")
abx
cdata$name1[!abx]<-NA
cdata
sp<-ggplot(cdata,aes(x=healthexp,y=infmortality))+geom_point()+
geom_text(aes(x=healthexp+100,y=infmortality+0.2,label=name1),size=4)+xlim(2000,10000)
sp
##4.气泡图,scale_size_area
#绘制气泡图
#size=GDP,GDP赋值给半径
p<-ggplot(cdata,aes(x=healthexp,y=infmortality,size=GDP))+geom_point(shape=21,colour="black",fill="cornsilk")
p
#GDP赋值给点的面积
p+scale_size_area(max_size = 15)