【方法介绍】R语言散点图绘制
About 散点图
这期咱们主要介绍高密度散点图,区别于普通的散点图,他可以更清晰地展示数据的空间分布,避免由于大量数据带来的数据重叠,从而无法有效地观察变量之间的关系。我们将运用R语言为大家简单介绍。
01
普通散点图
在这里我们以R语言自带数据mtcars为例(对,又是他),我们选取其中的变量wt以及mpg进行散点图绘制,其中wt为车重,mpg为每加仑英里数,首先加载mtcars的数据框,并绘制散点图。
为了更好地反映其中的线性关系,我们利用abline()函数绘制最佳拟合的线行直线,通过lowess()函数添加平滑曲线(其实平滑曲线更能反映数据细节,它是一种基于局部多项式回归的非参数方法,不懂没关系)代码如下:
>attach(mtcars)
>plot(wt,mpg,main="picture",xlab="x",ylab="y")
>abline(lm(mpg~wt),col="red",lwd=2,lty=1)
>lines(lowess(wt,mpg),col="blue",lwd=2,lty=1)
02
高密度散点图
当遇到例如空间定位等大量数据堆积的时候,简单的散点图在数据关系的反应上就有点无能为力了,这里我们随机生成10000个点数据,先用普通的散点图绘制一下看看效果,代码如下:
>set.seed(1234)
>n<-10000
>c1<-matrix(rnorm(n,mean=0,sd=.5),ncol=2)
>c2<-matrix(rnorm(n,mean=3,sd=2),ncol=2)
>mydata<-rbind(c1,c2)
>mydata<-as.data.frame(mydata)
>names(mydata)<-c("x","y")
>with(mydata,plot(x,y,pch=19,main="picture"))
黑乎乎的一大片,效果不佳,我们勉强能够通过绘制置信椭圆观测两组数据的分布情况,通过将椭圆代码赋值给变量可以获得椭圆边界,其中car函数包需要安装(如何按包就不多说了,以前介绍过),代码如下:
>library(car)
>boundary<-dataEllipse(mydata$x,mydata$y,levels=0.95,xlim=c(-5,10),ylim=c(-5,10))
>head(boundary)
03
核密度估算
如何解决由于数据的重叠导致的分析困难,这个方法在处理POI(Point of interest,兴趣点)数据时经常用到,gis中也有类似功能,如点密度或核密度估计生成的热力图,通过图中的色彩密度和明暗变化来表达数据的分布趋势,在R语言中自带的函数smoothScatter()函数可以实现这个过程,代码如下:
>with(mydata,smoothScatter(x,y,pch=19,main="picture"))
除此之外还有一些变式,作用就是让图片更Bueatiful。我们可以利用IDPmisc函数包绘制带有色彩渐变条的,点数据锐化程度更高的图片;还可以通过hexbin函数包将二元变量封装在六边形单元格中,也很漂亮,代码如下:
>library(IDPmisc)
>with(mydata,iplot(x,y,main="picture"))
>library(hexbin)
>with(mydata,{bin<-hexbin(x,y,xbins=50)
+ plot(bin,main="picture")})
(我也不知道是怎么回事,写在一行就会报错,分开写就能出现,求大佬指点)
要绘制可读性更强的散点图,试试上边的方法吧,这期制图讲解就到这里,敬请关注专辑“景观生态那些事儿”哦,持续更新ing……
小玗的生态圈
给你不一样的科研感受
点“在看”给我一朵小黄花