我正在尝试将分层群集显示为维恩图或任何其他有用的显示 BESIDES 树形图。我希望能够以多种不同的视图类型显示我的数据。
目前这样做会绘制树形图:
x <- hclust(dist(mtcars))
plot(x)
如何显示 LOOKS 这样的群集图:
https://www.projectrhea.org/rhea/images/3/3b/Lecture23VennClusters_OldKiwi.jpg
或者
http://bl.ocks.org/mbostock/7607535
或在此示例中显示群集数据有意义的任何其他内容。
我希望能够在 Shiny 中执行此操作,但简单的R示例就足够了。提前谢谢。
答案 0 :(得分:1)
您显示的图是群集图。有不同的方法来制作这些图。这是一种方法。您可以根据需要更改符号或将其关闭,同样可以填充符号。此外,还有树形图绘制的选项,即here
library(cluster)
head(mtcars)
fit <- kmeans(mtcars, 3) # 3 clusters
aggregate(mtcars, by=list(fit$cluster), mean)
newmtcars <- data.frame(mtcars, fit$cluster)
head(newmtcars)
# plot cluster solution
library(cluster)
clusplot(mtcars, fit$cluster,
color=TRUE, shade=TRUE, lines=0)
参考:http://www.statmethods.net/advstats/cluster.html https://stats.stackexchange.com/questions/31083/how-to-produce-a-pretty-plot-of-the-results-of-k-means-cluster-analysis
我不确定维恩图与上述情节有何不同。也许需要重叠的群体。这取决于数据和树命令。可以尝试改变树命令,在这种情况下,kmeans,当选择迭代次数时显示小的重叠。
fit <- kmeans(mtcars, 3, iter.max = 2) # 3 clusters, low number of iterations
clusplot(mtcars, fit$cluster,
color=TRUE, shade=FALSE, lines=0)
使用分层聚类执行此操作的一种方法是从树中提取组,然后在结果组上使用clusplot。
fit <- hclust(dist(mtcars))
groups <- cutree(fit, k=3)
clusplot(mtcars, groups[rownames(mtcars)],
color=TRUE, shade=FALSE, lines=0)
要查看树中包含更多剪切的数据段(包括层次树),一种方法是使用cut后跟clusplot
heir_tree_fit <- hclust(dist(mtcars))
for (ncut in seq(1,10)) {
group <- cutree(heir_tree_fit, k=ncut)
clusplot(mtcars, group[rownames(mtcars)],
color=TRUE, shade=FALSE, lines=0, main=paste(ncut,"cuts"))
}
以下是2次,6次和10次切割的数据
你可以制作一张包含所有剪辑的情节
par(new=FALSE)
for (ncut in seq(1,10)) {
group <- cutree(heir_tree_fit, k=ncut)
clusplot(mtcars, group[rownames(mtcars)],
color=TRUE, shade=FALSE, lines=0, xlim=c(-5,5),ylim=c(-5,5))
par(new=TRUE)
}
par(new=FALSE)
制作层次聚类的维恩图的另一种方法是从树中提取组,然后在结果组上使用vennDiagram。
# To make a Venn diagram
# source("http://bioconductor.org/biocLite.R")
biocLite("limma")
library(limma)
inGrp1 <- groups==1
inGrp2 <- groups==2
inGrp3 <- groups==3
vennData <- cbind(inGrp1, inGrp2, inGrp3)
aVenn <- vennCounts(vennData)
vennDiagram(aVenn)