2014-01-12 3 views
1

Это довольно легко построить хорошую большую матрицу диаграммы рассеяния с гистограммами вниз по диагонали для многомерных данных следующим образом:scatterplotMatrix с группой гистограмм

scatterplotMatrix(somedata[1:points.count,],groups=somedata[1:points.count,class], 
       by.groups=TRUE,diagonal="histogram") 

Согласно документации, хотя, это не представляется возможным разделить гистограмма с помощью меток групп, как это сделано в this question. Как бы вы это сделали, используя функцию splitplotMatrix или аналогичную функцию?

+2

Проверьте '' 'GGally''' пакет для функции' '' ggpairs() '' '. [Этот вопрос также имеет интересное решение] (http://stackoverflow.com/questions/11503902/colouring-ggplots-plotmatrix-by-k-means-clusters). Найдите ответ с помощью функции plotmatrix2. – marbel

ответ

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 

Я продолжаю слышать, что то же самое можно с помощью ggpairs(...) в пакете GGally. Мне бы хотелось увидеть фактический пример этого. Документация непостижима. Кроме того, ggpairs(...) чрезвычайно медленный (в моих руках), особенно с большими наборами данных.

+0

Это красиво. Это то, что я искал. –

+1

Рад помочь. Если этот ответ работает на вас, рассмотрите [принятие] (http://stackoverflow.com/help/someone-answers). – jlhoward

+0

Да, прости, я еще не добрался до него. Моя политика заключается в том, чтобы, по крайней мере, * попробовать свои решения, прежде чем принять, хотя я на месте. –

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") 

pairwise scatterplot matrix with group densities on diagonal

This intrepid asker понял, что вы должны включить axisLabels что несколько глупо, учитывая эстетический акцент ggplot и друзья.

Теперь я хочу знать, как распараллелить это, потому что это монстр с большим количеством переменных.

Смежные вопросы