如下所示,很容易构建一个漂亮的大型散点图矩阵,其中包含对角线下方的多元数据,如下所示:
scatterplotMatrix(somedata[1:points.count,],groups=somedata[1:points.count,class],
by.groups=TRUE,diagonal="histogram")
根据文档,似乎不可能像this question中那样按组标签划分直方图。你会怎样使用scatterplotMatrix或类似的函数?
答案 0 :(得分:2)
这是你的想法吗?
使用虹膜数据集:
library(ggplot2)
library(data.table)
library(reshape2) # for melt(...)
library(plyr) # for .(...)
xx <- with(iris, data.table(id=1:nrow(iris), group=Species,
Sepal.Length, Sepal.Width,Petal.Length, Petal.Width))
# reshape for facetting with ggplot
yy <- melt(xx,id=1:2, variable.name="H", value.name="xval")
yy <- data.table(yy,key="id,group")
ww <- yy[,list(V=H,yval=xval),key="id,group"]
zz <- yy[ww,allow.cartesian=T]
setkey(zz,H,V,group)
zz <- zz[,list(id, group, xval, yval, min.x=min(xval), min.y=min(yval),
range.x=diff(range(xval)),range.y=diff(range(yval))),by="H,V"]
# points colored by group (=species)
# density plots for each variable by group
d <- zz[H==V, list(x=density(xval)$x,
y=mean(min.y)+mean(range.y)*density(xval)$y/max(density(xval)$y)),
by="H,V,group"]
ggp = ggplot(zz)
ggp = ggp + geom_point(subset =.(H!=V),
aes(x=xval, y=yval, color=factor(group)),
size=3, alpha=0.5)
ggp = ggp + geom_line(subset = .(H==V), data=d, aes(x=x, y=y, color=factor(group)))
ggp = ggp + facet_grid(V~H, scales="free")
ggp = ggp + scale_color_discrete(name="Species")
ggp = ggp + labs(x="", y="")
ggp
我一直听说在GGally包中使用ggpairs(...)
可以做同样的事情。我很想看到一个真实的例子。文档是不可思议的。此外,ggpairs(...)
非常慢(在我手中),特别是对于大型数据集。
答案 1 :(得分:1)
供以后参考,GGally的方法如下:
require(ggpairs)
tmp <- data.table(a = runif(30),b = runif(30), c = runif(30)+1,
d = as.factor(sample(0:1,size=30, replace=TRUE)))
ggpairs(data=tmp, diag=list(continuous="density"), columns=1:3, colour="d",
axisLabels="show")
This intrepid asker发现你必须启用有点傻的axisLabels,考虑到ggplot和朋友的美学重点。
现在我想知道如何并行化这个,因为它是一个有大量变量的怪物。