2012-07-16 39 views
5

Tôi đang cố gắng tạo ra một cặp âm mưu của 6 biến dữ liệu bằng cách sử dụng ggplot2 và tô màu các điểm theo cụm k có nghĩa là chúng thuộc về. Tôi đọc tài liệu về gói 'GGally' rất ấn tượng cũng như bản sửa lỗi chính thức của Adam Laiacano [http://adamlaiacano.tumblr.com/post/13501402316/colored-plotmatrix-in-ggplot2]. Thật không may, tôi không thể tìm thấy bất kỳ cách nào để có được sản lượng mong muốn trong cả hai.Tô màu của gamgrix bằng các cụm k-means?

Dưới đây là một số mẫu mã: -

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

Cả hai lô được tạo ra nhưng không màu theo cụm.

Hy vọng tôi chưa bỏ lỡ câu trả lời cho câu hỏi này trên diễn đàn và xin lỗi nếu đó thực sự là trường hợp. Bất cứ sự giúp đỡ nào cũng được đánh giá cao.

Cảm ơn!

+1

Bạn có thể thực hiện điều đó bằng lệnh cốt truyện thông thường bằng cách chuyển các clusterID trong tham số 'col'. –

+0

Cảm ơn câu trả lời, @ThomasJungblut. Nhưng tôi không chắc tôi hoàn toàn hiểu nó. Bạn đang tư vấn việc sử dụng các khía cạnh? Tôi đã thử chơi với facet_grid sử dụng các ví dụ được đưa ra trên http://stackoverflow.com/questions/1313954/plotting-two-vectors-of-data-on-a-ggplot2-scatter-plot-using-r. Họ không phục vụ mục đích của tôi mặc dù. Một ví dụ tối thiểu sẽ giúp ích to lớn cho tôi để hiểu rõ hơn đề xuất của bạn. Một lần nữa xin cảm ơn! –

+0

Nó chỉ là một âm mưu phân tán bình thường của các điểm của bạn được tô màu bởi các cụm. Xem tài liệu kmeans thông thường tại đây: http://stat.ethz.ch/R-manual/R-devel/library/stats/html/kmeans.html ở dưới cùng: 'plot (x, col = cl $ cluster) 'where' cl $ cluster' là gán cho một cụm. –

Trả lời

4

Các sửa đổi chút ít sau plotmatrix2 hoạt động tốt đối với tôi:

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

Nó có thể là một vấn đề ggplot2 phiên bản, nhưng tôi đã phải buộc các biến faceting trong khung densities dữ liệu là các yếu tố (có vẻ như bị phá vỡ với tôi ngay cả trong phiên bản GGally). Ngoài ra, thường không truyền véc tơ đến aes(), mà chỉ đơn giản là tên cột.

+1

điều này làm việc cho tôi mặc dù vẫn cố gắng để hiểu chức năng của mã từ 'mặc định' trở đi. cũng nhờ lời khuyên về 'aes()'. –

+0

Với phiên bản ggplot2 mới nhất (iirc 0.9.3.1), điều này tạo ra 'không thể tìm thấy hàm mặc định" '. – bluenote10

Các vấn đề liên quan