2012-07-16 14 views
5

私は、ggplot2を使って6つのデータ変数の対のプロットを作成しようとしています。私は非常に印象的な「GGally」パッケージのドキュメンテーションとAdam Laiacano [http://adamlaiacano.tumblr.com/post/13501402316/colored-plotmatrix-in-ggplot2]の非公式修正を読みました。残念ながら、どちらの方法でも目的の出力を得る方法が見つかりませんでした。k-meansクラスタによるggplotのプロット行列の着色?

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

両方のプロットが作成されますが、クラスタに応じて色付けされていません - :ここでは

は、サンプルコードです。

私はフォーラムでこの質問に対する回答を見逃しておらず、本当に謝罪しています。どんな助けも高く評価されます。

ありがとうございます!

+1

通常のplotコマンドでも、 'col'パラメータにclusterIDを渡すことでこれを行うことができます。 –

+0

答えをくれてありがとう、@ ThomasJungblut。しかし、私はそれを完全に理解しているかどうかはわかりません。ファセットの使用をアドバイスしていますか?私はfacet_gridで試してみましたが、http://stackoverflow.com/questions/1313954/plotting-two-vectors-of-data-on-a-ggplot2-scatter-plot-using-rで与えられた例を使用しています。彼らは私の目的を果たしていません。私があなたの提案をより良く理解するためには、最小限の例があります。もう一度ありがとう! –

+0

これは、クラスタによって着色されたポイントの通常の散布図です。通常のkmeansのdocを見てください:http://stat.ethz.ch/R-manual/R-devel/library/stats/html/kmeans.html下の方: 'plot(x、col = cl $ cluster) '' cl $ cluster'はクラスタへの割り当てです。 –

答えて

4

plotmatrix2次の若干の修正が私のために正常に動作します:

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

それは、ggplot2バージョンの問題かもしれないが、私はdensitiesデータフレームにファセット変数を強制しなければなりませんでしたファクタ(それはGGallyバージョンでさえ私に壊れているようです)。また、一般的にベクトルをaes()に渡すのではなく、単に列名を渡します。

+1

これは私のために働いていましたが、引き続き、「デフォルト」からのコードの機能を理解しようとしました。また、 'aes()'に関するヒントをありがとう。 –

+0

最新のggplot2バージョン(iirc 0.9.3.1)では、 'could not find function"のデフォルト値 "が生成されます。 – bluenote10

関連する問題