2012-07-16 7 views
5

Sto cercando di creare un grafico di coppie di 6 variabili di dati utilizzando ggplot2 e colorare i punti in base al cluster k-means a cui appartengono. Ho letto la documentazione del pacchetto GGally molto impressionante e una correzione informale di Adam Laiacano [http://adamlaiacano.tumblr.com/post/13501402316/colored-plotmatrix-in-ggplot2]. Sfortunatamente, non sono riuscito a trovare alcun modo per ottenere l'output desiderato in entrambi.Colorare la matrice trama di ggplot per k-significa cluster?

Ecco un codice di esempio: -

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

Entrambe le trame sono creati, ma non sono colorati in base ai cluster.

Spero di non aver perso una risposta a questa domanda sul forum e mi scuso se è davvero così. Qualsiasi aiuto sarebbe molto apprezzato.

Grazie!

+1

È possibile farlo anche con il normale comando di stampa passando gli ID cluster nel parametro 'col'. –

+0

Grazie per la risposta, @ThomasJungblut. Ma non sono sicuro di capirlo completamente. Stai consigliando l'uso di sfaccettature? Ho provato a giocare con facet_grid usando gli esempi forniti su http://stackoverflow.com/questions/1313954/plotting-two-vectors-of-data-on-a-ggplot2-scatter-plot-using-r. Comunque non stanno servendo il mio scopo. Un esempio minimo potrebbe essere di grande aiuto per capire meglio il tuo suggerimento. Grazie ancora! –

+0

È solo un normale diagramma a dispersione dei punti colorati dai cluster. Vedi i normali documenti kmea qui: http://stat.ethz.ch/R-manual/R-devel/library/stats/html/kmeans.html in basso nella parte inferiore: 'trama (x, colonna = cl $ cluster) 'dove' cl $ cluster' è l'assegnazione a un cluster. –

risposta

4

Il seguente leggera modifica plotmatrix2 funziona bene per me:

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

può essere un problema ggplot2 versione, ma ho dovuto forzare le variabili sfaccettatura nella cornice di dati densities essere fattori (mi sembra rotto anche nella versione GGally). Inoltre, generalmente non passare i vettori a aes(), ma semplicemente nomi di colonne.

+1

questo ha funzionato per me pur cercando di capire il funzionamento del codice da "default" in poi. Inoltre, grazie per il suggerimento su 'aes()'. –

+0

Con la versione ggplot2 più recente (iirc 0.9.3.1), questo produce 'impossibile trovare la funzione" default "'. – bluenote10