在R中有很多方式去绘制散点图,其中最基本的就是是用plot(x, y)函数,往期内容已经进行过详细讲解,这里就不赘述了,下面直接看实例图。
# 简单散点图
attach(mtcars) #固定目标数据,方便后续绘图
plot(wt, mpg, main="Scatterplot Example",
xlab="Car Weight ", ylab="Miles Per Gallon ", pch=19) #绘图
# Add fit lines
abline(lm(mpg~wt), col="red") # 添加拟合线,这里lm()是一个线性回归函数
lines(lowess(wt,mpg), col="blue") # LOWESS(局部加权散点图平滑化)
在这里我想简单说说attach()函数和detach()函数,这两个函数几乎是成对出现的,首先使用attach()函数先固定一个数据集,这样绘图时就不必使用data$variable的形式来表达变量,使代码简洁明了;当使用完当前数据集需要detach()来解除固定,这样就不会对后续操作产生影响。
从图中我们可以看出lm()得到的是一条直线,而lowess()得到的则是一条平滑曲线。这里提醒一下,lowess()函数是一个局部加权多项式回归函数,详细内容会在以后的统计部分和大家讲解,这里暂不涉及,只需要知道有这个函数方法的存在即可。
R包“car”里提供的scatterplot()是一个高效绘制散点图的函数,它可以用来添加拟合线、绘制边际箱线图等等。
# 增强散点图mpg vs. wt
# 利用气缸数来分类
library(car) #加载R包
scatterplot(mpg ~ wt | cyl, data=mtcars,
xlab="Weight of Car", ylab="Miles Per Gallon",
main="Enhanced Scatter Plot",
legend=row.names(mtcars)) #row.names()也可写成rownames()
这里的公式mpg~wt | cyl表示的是以mpg作为纵坐标,wt(汽车的重量)作为横坐标,利用cyl对样本分类标记,然后绘图。从图中可以看出,mpg和wt存在着负相关关系。
散点图矩阵是数据分析者特别喜欢的一类图,因为它能简洁而优雅地反映出大量信息,比如变化趋势和关联程度等等。在R中也有很多函数可以用来绘制散点图矩阵。
# 基本散点图矩阵
pairs(~mpg+disp+drat+wt,data=mtcars,
main="Simple Scatterplot Matrix")
函数pairs()是一个绘制散点图矩阵的基本函数,它的第一个参数就是绘图公式,~mpg+disp+drat+wt表示mpg、disp、drat和wt两两配对绘制散点图,考虑到横纵坐标可以互调,所以共有4*3=12种情况。从图中我们可以看到数据两两之间的关系,非常简洁明了。
# 利用“car“包的scatterplotMatrix()函数绘制散点图矩阵
library(car)
scatterplotMatrix(~mpg+disp+drat+wt|cyl, data=mtcars,
main="Three Cylinder Options")
这里只是添加了cyl这个调整项,关于绘图结果的解释可以参考前面的内容。
当数据集中的数据点有高度重合时,一般的可视化并不能带来较好的效果。这里可以使用“hexbin“包里的hexbin(x,y)函数来解决问题,也可以通过调整点之间的色差来区别重合的点。
# 使用hexbin()函数绘制高密度散点图
library(hexbin) #加载R包
x <- rnorm(1000) #生成1000个服从标准正态分布的随机数
y <- rnorm(1000) #生成1000个服从标准正态分布的随机数
bin<-hexbin(x, y, xbins=50) #生成六边形(hexagonal cell)
plot(bin, main="Hexagonal Binning") #绘图
从绘图的结果可以看出来hexbin()函数将重叠的数据点用不同颜色深度的六边形来区分来,使散点图一目了然。
另外也可以使用sunflowerplot()这个函数来解决样本点重合的问题。下面介绍一下如何使用色差对比来解决样本点重合的绘图问题。
# 使用色差绘制高密度散点图
x <- rnorm(1000) #生成1000个服从标准正态分布的随机数
y <- rnorm(1000) #生成1000个服从标准正态分布的随机数
plot(x,y, main="Scatterplot Example", col=rgb(0,100,0,50,maxColorValue=255), pch=16) #rgb()函数调整色差
你可以使用“scatterplot3d“包里的scatterplot3d()函数来绘制3D散点图,下面是几个实例:
# 简单3D散点图
library(scatterplot3d) #加载R包
attach(mtcars) #固定数据集
scatterplot3d(wt,disp,mpg, main="3D Scatterplot") #绘制3D散点图,第一个参数是x轴,第二个参数是y轴,第三个参数是z轴
# 绘制带有颜色和垂线的3D散点图
library(scatterplot3d) #加载R包
attach(mtcars) #固定数据集
scatterplot3d(wt,disp,mpg, pch=16, highlight.3d=TRUE,
type="h", main="3D Scatterplot") #参数highlight.3d=TRUE用来添加颜色,type="h"添加垂线
另外感兴趣的小伙伴可以使用“rgl“包里的plot3D(x, y, z)函数来绘制具有交互作用的3D散点图,但这种图在学术上使用并不多。
到现在为止关于R语言基础绘图部分我们已经全部介绍完毕,如果还有不明白的地方可以在菜单栏里查看往期内容,接下来我们将进入到基础统计部分的学习,希望大家能感兴趣!