gpt4 book ai didi

r - 通过 k 均值聚类对 ggplot 的绘图矩阵进行着色?

转载 作者:行者123 更新时间:2023-12-02 10:55:56 24 4
gpt4 key购买 nike

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

这是示例代码:-

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

这两个图均已创建,但未根据聚类着色。

希望我没有错过论坛上这个问题的答案,如果确实如此,我深表歉意。任何帮助将不胜感激。

谢谢!

最佳答案

以下对 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版本问题,但我不得不强制密度数据框中的分面变量成为因子(即使在GGally版本)。另外,通常不会将向量传递给 aes(),而只是传递列名称。

关于r - 通过 k 均值聚类对 ggplot 的绘图矩阵进行着色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11503902/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com