2012-07-16 16 views
5

Estoy tratando de crear una gráfica de pares de 6 variables de datos usando ggplot2 y colorear los puntos de acuerdo con el clúster k-means al que pertenecen. Leí la documentación del impresionante paquete "GGally" y una solución informal de Adam Laiacano [http://adamlaiacano.tumblr.com/post/13501402316/colored-plotmatrix-in-ggplot2]. Desafortunadamente, no pude encontrar ninguna forma de obtener el resultado deseado en ninguno de los dos.¿Colorea la plotmatrix de ggplot por k-means clusters?

Aquí hay un código de ejemplo: -

#The Swiss fertility dataset has been used here 

data_ <- read.csv("/home/tejaskale/Ubuntu\ One/IUCAA/Datasets/swiss.csv", header=TRUE) 
data_ <- na.omit(data_) 

u <- c(2, 3, 4, 5, 6, 7) 
x <- data_[,u] 
k <- 3 
maxIterations <- 100 
noOfStarts <- 100 
filename <- 'swiss.csv' 

library(ggplot2) 
library(gridExtra) 
library(GGally) 

kmeansOutput <- kmeans(x, k, maxIterations, noOfStarts) 

xNew <- cbind(x[,1:6], as.factor(kmeansOutput$cluster)) 
names(xNew)[7] <- 'cluster' 
kmeansPlot <- ggpairs(xNew[,1:6], color=xNew$cluster) 

OR 

kmeansPlot <- plotmatrix(xNew[,1:6], mapping=aes(colour=xNew$cluster)) 

Ambas parcelas se crean pero no están coloreados de acuerdo con las agrupaciones.

Espero no haber perdido una respuesta a esta pregunta en el foro y me disculpo si ese es realmente el caso. Cualquier ayuda sería muy apreciada.

Gracias!

+1

También puede hacerlo con el comando de trazado normal pasando los clusterID en el parámetro 'col'. –

+0

Gracias por la respuesta, @ThomasJungblut. Pero no estoy seguro de entenderlo por completo. ¿Estás aconsejando el uso de facetas? Intenté jugar con facet_grid usando los ejemplos que figuran en http://stackoverflow.com/questions/1313954/plotting-two-vectors-of-data-on-a-ggplot2-scatter-plot-using-r. Sin embargo, no están sirviendo mi propósito. Un ejemplo mínimo sería de gran ayuda para que yo entienda mejor su sugerencia. ¡Gracias una vez más! –

+0

Es solo un diagrama de dispersión normal de sus puntos coloreados por los grupos. Vea el documento normal de kmeans aquí: http://stat.ethz.ch/R-manual/R-devel/library/stats/html/kmeans.html abajo en la parte inferior: 'plot (x, col = cl $ cluster) 'donde' cl $ cluster' es la asignación a un clúster. –

Respuesta

4

La siguiente ligera modificación de plotmatrix2 funciona bien para mí:

plotmatrix2 <- function (data, mapping = aes()) 
{ 
    grid <- expand.grid(x = 1:ncol(data), y = 1:ncol(data)) 
    grid <- subset(grid, x != y) 
    all <- do.call("rbind", lapply(1:nrow(grid), function(i) { 
     xcol <- grid[i, "x"] 
     ycol <- grid[i, "y"] 
     data.frame(xvar = names(data)[ycol], yvar = names(data)[xcol], 
      x = data[, xcol], y = data[, ycol], data) 
    })) 
    all$xvar <- factor(all$xvar, levels = names(data)) 
    all$yvar <- factor(all$yvar, levels = names(data)) 
    densities <- do.call("rbind", lapply(1:ncol(data), function(i) { 
     data.frame(xvar = names(data)[i], yvar = names(data)[i], 
      x = data[, i]) 
    })) 
    densities$xvar <- factor(densities$xvar, levels = names(data)) 
    densities$yvar <- factor(densities$yvar, levels = names(data)) 
    mapping <- defaults(mapping, aes_string(x = "x", y = "y")) 
    class(mapping) <- "uneval" 
    ggplot(all) + facet_grid(xvar ~ yvar, scales = "free") + 
     geom_point(mapping, na.rm = TRUE) + stat_density(aes(x = x, 
     y = ..scaled.. * diff(range(x)) + min(x)), data = densities, 
     position = "identity", colour = "grey20", geom = "line") 
} 


plotmatrix2(mtcars[,1:3],aes(colour = factor(cyl))) 

enter image description here

Puede ser un problema de ggplot2 versión, pero tuve que forzar las variables de facetado en la trama de datos densities ser factores (eso me parece roto incluso en la versión GGally). Además, generalmente no pasa vectores a aes(), sino simplemente nombres de columna.

+1

esto funcionó para mí, aunque aún trataba de entender el funcionamiento del código desde 'predeterminados' en adelante. también, gracias por la sugerencia con respecto a 'aes()'. –

+0

Con la versión más reciente de ggplot2 (iirc 0.9.3.1), esto produce los valores predeterminados 'could not find function ''. – bluenote10