首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用k-means聚类对ggplot的绘图矩阵进行着色?

用k-means聚类对ggplot的绘图矩阵进行着色?
EN

Stack Overflow用户
提问于 2012-07-16 20:04:08
回答 1查看 2.6K关注 0票数 5

我正在尝试使用ggplot2创建一个由6个数据变量组成的配对图,并根据点所属的k均值聚类对点进行着色。我阅读了令人印象深刻的'GGally‘包的文档,以及Adam Laiacano http://adamlaiacano.tumblr.com/post/13501402316/colored-plotmatrix-in-ggplot2.的非正式修复。不幸的是,我找不到任何方法来获得所需的输出。

下面是一个示例代码:

代码语言:javascript
复制
#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))

这两个图都是创建的,但没有根据聚类进行着色。

希望我在论坛上没有错过这个问题的答案,如果确实是这样的话,我道歉。任何帮助都将不胜感激。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-17 00:01:44

以下对plotmatrix2的轻微修改对我来说很好:

代码语言:javascript
复制
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)))

这可能是ggplot2版本的问题,但我不得不强制densities数据框中的分面变量成为因子(这在我看来甚至在GGally版本中也是无效的)。此外,通常不会将向量传递给aes(),而只是传递列名。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11503902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档