有许多问题使得从散点图矩阵中提取任何可用信息变得困难或不可能。
一起显示的变量太多。 当散点图矩阵中有很多变量时,每个图都变得太小而无用。需要注意的是,许多地块是重复的,这浪费了空间。此外,尽管您确实希望查看每个组合,但您不必将它们全部绘制在一起。请注意,您可以将散点图矩阵分解为四个或五个较小的块(一个有用的可视化数字)。您只需要制作多个图,每个块一个。
由于您在空间中的离散点有大量数据,因此它们最终会堆叠在一起。因此,您无法看到每个位置有多少点。有几个技巧可以帮助您处理这个问题。
- 首先是抖动。抖动意味着向数据集中的值添加少量噪声。噪声取自以您的值加或减一些少量为中心的均匀分布。有确定最佳数量的算法,但由于您的数据是从 1 到 10 的整数单位,.5似乎是个不错的选择。
- 有了如此多的数据,即使是抖动也会使模式难以辨别。您可以使用高度饱和但基本上透明的颜色来解决此问题。有很多数据堆叠在一起的地方,颜色会变深,而密度小的地方,颜色会变浅。
- 为了使透明度起作用,您将需要实心符号来显示您的数据,而 R 默认使用空心圆。
使用这些策略,这里是一些示例 R 代码和绘制的图:
# the alpha argument in rgb() lets you set the transparency
cols2 = c(rgb(red=255, green=0, blue=0, alpha=50, maxColorValue=255),
rgb(red=0, green=0, blue=255, alpha=50, maxColorValue=255) )
cols2 = ifelse(breast$class==2, cols2[1], cols2[2])
# here we jitter the data
set.seed(6141) # this makes the example exactly reproducible
jbreast = apply(breast[,1:9], 2, FUN=function(x){ jitter(x, amount=.5) })
jbreast = cbind(jbreast, class=breast[,10]) # the class variable is not jittered
windows() # the 1st 5 variables, using pch=16
pairs(jbreast[,1:5], col=cols2, pch=16)
windows() # the 2nd 5 variables
pairs(jbreast[,6:10], col=cols2, pch=16)
windows() # to match up the 1st & 2nd sets requires more coding
layout(matrix(1:25, nrow=5, byrow=T))
par(mar=c(.5,.5,.5,.5), oma=c(2,2,2,2))
for(i in 1:5){
for(j in 6:10){
plot(jbreast[,j], jbreast[,i], col=cols2, pch=16,
axes=F, main="", xlab="", ylab="")
box()
if(j==6 ){ mtext(colnames(jbreast)[i], side=2, cex=.7, line=1) }
if(i==5 ){ mtext(colnames(jbreast)[j], side=1, cex=.7, line=1) }
if(j==10){ axis(side=4, seq(2,10,2), cex.axis=.8) }
if(i==1 ){ axis(side=3, seq(2,10,2), cex.axis=.8) }
}
}