高密度散点图主要是用来解决当大数据集而又有很多点可能重合的数据可视化问题,基本上就是大家常说的热力图。
三维散点图主要是解决需要可视化的数据维度大于2维的情况,当然当数据大于2维时三维图并不是唯一的解决办法,还有气泡图以及分系列的散点图等,有时候我甚至觉得三维散点图虽然看上去炫一点,但是信息的呈现方式并不如气泡图和分系列散点图直观。
生成数据
set.seed(1234) n=10000 c1=matrix(rnorm(n,mean=0,sd=0.5),ncol=2) # 生成均值为0,方差为0.5的10000个数据点,设置矩阵的列数为2,也就是5000 × 2 c2=matrix(rnorm(n,mean=3,sd=2),ncol=2) data=rbind(c1,c2) # 将c1和c2按列合并 data=as.data.frame(data) names(data)=c("x","y") # 合并后明显可以看到如果作出x和y的分布图,应该是主要分为两大块,因为c1和c2均值和方差存着明显差异 dim(data)
一般散点图
with(data,plot(x,y,main="一般散点图"))
一般散点图
平滑密度估计散点图
其实根据一般散点图我们也大致可以看出来,点大致可以分为两堆,其中一堆值较小较聚集,另一堆值较大也较分散。
为了更直观地观察x和y之间的关系,我们可以利用封箱、颜色和透明度来设置图中重合点的表现方式,使数据点的密度易读性更强。
smoothScatter( )函数
with(data,smoothScatter(x,y,main="平滑密度估计的散点图"))
平滑密度估计的散点图
六边形封箱散点图
利用hexbin包中的hexbin( )函数将二元变量的封箱放到六边形单元格中来展示高密度的数据点。
六边形越黑的地方表示这个分箱内点的数目越多。
library(hexbin) with(data,{bin=hexbin(x,y,xbins=50);plot(bin,main="六边形封箱散点图")}) #xbins=50,设置x轴的分箱数目为50
六边形封箱散点图
颜色标识散点图
IDPmisc包中的iplot( )函数通过颜色来展示点的密度,使得数据集中度很容易辨识。
library(IDPmisc) with(data,iplot(x,y,main="颜色标识的散点图"))
颜色标识的散点图
简单三维散点图
假设我们需要同时观察汽车英里数mpg、车重wt和排量间disp的关系,则需要用到三维散点图。
scatterplot3d(x,y,z)
library(scatterplot3d) attach(mtcars) scatterplot3d(wt,disp,mpg,main="简单三维散点图")
简单三维散点图
pch=16,设置绘制点时使用的符号为序号“16”所对应的符号
highlight.3d=TRUE,突出显示,增强纵深感
type="h",添加连接点与水平面的垂直线
library(scatterplot3d) attach(mtcars) scatterplot3d(wt,disp,mpg,pch=16,highlight.3d=TRUE,type="h",main="添加垂直线的三维散点图")
添加垂直线的三维散点图
在之前的图形的基础上,添加一个回归面
s3d=scatterplot3d(wt,disp,mpg,pch=16,highlight.3d=TRUE,type="h",main="添加回归面的三维散点图") fit=lm(mpg~wt+disp) s3d$plane3d(fit)
添加回归面的三维散点图
旋转三维散点图
旋转三维散点图主要是添加了交互式操作,你可以用鼠标使整个图形进行旋转,从多个角度观测绘制的数据点。
rgl包中的plot3d( )函数,plot3d(x,y,z)
Rcmdr包中的scatter3d( )函数, scatter3d(x,y,z)
library(rgl) attach(mtcars) plot3d(wt,disp,mpg,col="red",size=5)
旋转三维散点图
library(Rcmdr) attach(mtcars) scatter3d(wt,disp,mpg)
旋转三维散点图
scatter3d( )函数可包含各种回归曲面,比如线性、二次、平滑和附加等类型。图形默认添加线性平面。另外,函数中还有可用于交互式识别点的选项。