散点图是描绘两个连续型变量之间关系的图形,特别是在观察两个变量之间的相关关系时特别好使。
aes中的x,y值分别表示在x,y轴的变量;geom_point表示增加三点图图层,其中的size控制点的大小,shape控制形状,一共25个,为0-25。
library(gcookbook)
library(ggplot2)
head(heightweight)
# sex ageYear ageMonth heightIn weightLb
#1 f 11.92 143 56.3 85.0
#2 f 12.92 155 62.3 105.0
#3 f 12.75 153 63.3 108.0
#4 f 13.42 161 59.0 92.0
#5 f 15.92 191 62.5 112.5
#6 f 14.25 171 62.5 112.0
ggplot(heightweight, aes(x=ageYear, y=heightIn)) + geom_point(size=3,shape=21)
散点图分组有两种方式,一种利用shape,以点的形状来区分各种;一种用color,以点的颜色来区分.但是得记住,分组的变量必须为因子变量或者字符串。
ggplot(heightweight, aes(x=ageYear, y=heightIn, colour=sex)) + geom_point()#以颜色区分
ggplot(heightweight, aes(x=ageYear, y=heightIn, shape=sex)) + geom_point()#以形状区分
当点的密度大时,我们可以改变点的透明度来区分各个点。当然我们可以使用bin的方法来区分,这种方法是把点的形状设定为长方形,密度越大的长方形区域越透明。
ggplot(diamonds, aes(x=carat, y=price))+ geom_point(alpha=.1)
ggplot(diamonds, aes(x=carat, y=price))+ geom_point(alpha=.01)
ggplot(diamonds, aes(x=carat, y=price))+ stat_bin2d()
当其中的一个或者两个变量为离散型数据时,也会导致覆盖的问题。我们可以使用jitter方法和box的方法。
ggplot(ChickWeight, aes(x=Time, y=weight))+geom_point()
ggplot(ChickWeight, aes(x=Time, y=weight))+geom_point(position="jitter")
#position="jitter"等价于geom_jitter,即下面的方法
ggplot(ChickWeight, aes(x=Time, y=weight))+geom_point(position=position_jitter(width=.5, height=0))
ggplot(ChickWeight, aes(x=Time, y=weight))+ geom_boxplot(aes(group=Time))
为了更好的看出两个变量之间的关系,我们还可以拟合回归线,用stat_smooth(method=lm)函数即可。
ggplot(heightweight, aes(x=ageYear, y=heightIn))+geom_point() + stat_smooth(method=lm)
#该回归直线的置信区间默认的置信度是95%,我们也可以对其进行修改。
ggplot(heightweight, aes(x=ageYear, y=heightIn))+ geom_point() + stat_smooth(method=lm, level=0.99)#99%的置信度
#也可以不显示置信区间
ggplot(heightweight, aes(x=ageYear, y=heightIn))+ geom_point(colour="grey60") + stat_smooth(method=lm, se=FALSE)
还有很多关于增回归线的技术,这里暂时不涉及,这本身还需要相关的计量知识来支撑的,需要了解的大家再查看书籍对应部分即可。
有时候,当点数量不多时,我们想让点显示名称来进行区分,用geom_text就能做到,只要给参数label赋予对应的名字即可。
ggplot(subset(countries, Year==2009 & healthexp>2000),
aes(x=healthexp, y=infmortality)) +geom_text(aes(label=Name), size=4)
有时候我们想展示三个变量之间的关系,这时气泡图是一个很好的工具。
cdat <- subset(countries, Year==2009 &
Name %in% c("Canada", "Ireland", "United Kingdom", "United States",
"New Zealand", "Iceland", "Japan", "Luxembourg",
"Netherlands", "Switzerland"))
#气泡大小用size参数进行控制,把第三个变量赋值给该参数就行。
ggplot(cdat, aes(x=healthexp, y=infmortality, size=GDP)) +
geom_point(shape=21, colour="black", fill="cornsilk")
散点矩阵图是展示多个变量相互之间的一个极好展示。
c2009 <- subset(countries, Year==2009,
select=c(Name, GDP, laborrate, healthexp, infmortality))
pairs(c2009[,2:5])