使用plot(hclust(dist(x)))方法,我能够绘制一个簇树映射.有用.然而,我想获得所有集群的列表,而不是树图,因为我有大量的数据(如150K节点),情节变得混乱.
换句话说,假设if a b c是一个集群,如果d e f g是一个集群,那么我想得到这样的东西:
1 a,b,c
2 d,e,f,g
Run Code Online (Sandbox Code Playgroud)
请注意,这不是我想要的"输出".这只是一个例子.我只是希望能够得到一个簇的列表,而不是一个树图.它可以是向量,矩阵或只是简单的数字,显示元素属于哪些组.
这怎么可能?
我试图从hclust函数输出中绘制树形图.我希望树形图是水平排列而不是默认值,可以通过(例如)获得
require(graphics)
hc <- hclust(dist(USArrests), "ave")
plot(hc)
Run Code Online (Sandbox Code Playgroud)
我尝试使用as.dendrogram()函数,plot(as.dendrogram(hc.poi),horiz=TRUE)但结果没有有意义的标签:

如果我使用plot(hc.poi,labels=c(...))哪个没有as.dendrogram(),我可以传递labels=参数,但现在树形图是垂直的而不是水平的.有没有办法水平同时排列树形图并分配用户指定的标签?谢谢!
更新:作为USArrests数据集的一个例子,假设我想使用州名的前两个字母的缩写作为标签,这样我想以某种方式labs进入绘图功能:
labs = substr(rownames(USArrests),1,2)
这使
[1] "Al" "Al" "Ar" "Ar" "Ca" "Co" "Co" "De" "Fl" "Ge" "Ha"
[12] "Id" "Il" "In" "Io" "Ka" "Ke" "Lo" "Ma" "Ma" "Ma" "Mi"
[23] "Mi" "Mi" "Mi" "Mo" "Ne" "Ne" "Ne" "Ne" "Ne" "Ne" "No"
[34] "No" "Oh" "Ok" "Or" "Pe" "Rh" "So" "So" "Te" "Te" "Ut"
[45] "Ve" "Vi" …Run Code Online (Sandbox Code Playgroud) 我试着通过以下方式构建聚类方法:
mydata <- mtcars
# Here I construct hclust as a function
hclustfunc <- function(x) hclust(as.matrix(x),method="complete")
# Define distance metric
distfunc <- function(x) as.dist((1-cor(t(x)))/2)
# Obtain distance
d <- distfunc(mydata)
# Call that hclust function
fit<-hclustfunc(d)
# Later I'd do
# plot(fit)
Run Code Online (Sandbox Code Playgroud)
但为什么它会出现以下错误:
Error in if (is.na(n) || n > 65536L) stop("size cannot be NA nor exceed 65536") :
missing value where TRUE/FALSE needed
Run Code Online (Sandbox Code Playgroud)
什么是正确的方法呢?
heatmap.2默认为dist用于计算距离矩阵和hclust用于聚类.现在有人怎么设置dist来使用欧几里德方法和hclust来使用质心方法?我提供了一个可编译的代码示例.我尝试过:distfun = dist(method ="euclidean"),但这不起作用.有任何想法吗?
library("gplots")
library("RColorBrewer")
test <- matrix(c(79,38.6,30.2,10.8,22,
81,37.7,28.4,9.7,19.9,
82,36.2,26.8,9.8,20.9,
74,29.9,17.2,6.1,13.9,
81,37.4,20.5,6.7,14.6),ncol=5,byrow=TRUE)
colnames(test) <- c("18:0","18:1","18:2","18:3","20:0")
rownames(test) <- c("Sample 1","Sample 2","Sample 3", "Sample 4","Sample 5")
test <- as.table(test)
mat=data.matrix(test)
heatmap.2(mat,
dendrogram="row",
Rowv=TRUE,
Colv=NULL,
distfun = dist,
hclustfun = hclust,
xlab = "Lipid Species",
ylab = NULL,
colsep=c(1),
sepcolor="black",
key=TRUE,
keysize=1,
trace="none",
density.info=c("none"),
margins=c(8, 12),
col=bluered
)
Run Code Online (Sandbox Code Playgroud) 我使用xlab =""来抑制x标签但仍在我的树形图中得到'sub-x-label'.如何删除它并删除树形图下的任何额外空间?
require(graphics)
hc <- hclust(dist(USArrests), "ave")
plot(hc,xlab="")
Run Code Online (Sandbox Code Playgroud)

是否有人找到了解决R 3明显错误的方法,该错误禁止更改群集树形图上的标签大小?
以下代码用于在将R更新为3.01之前正常工作(我认为之前的版本是2.15):
plot(hclust, labels = data[, 1], cex = 0.3)
Run Code Online (Sandbox Code Playgroud)
现在,在更改cex参数时,标签大小没有变化.
我产生这种树状图,使用R的hclust(),as.dendrogram()和plot.dendrogram()功能.
我使用dendrapply()函数和局部函数来为叶子着色,这很好.
我有统计测试的结果,表明一组节点(例如树的右下角的" _+v\_stat5a\_01_"和" _+v\_stat5b\_01_" 的簇)是重要的还是重要的.
我还有一个可以使用的本地函数,dendrapply()它在我的树形图中找到包含重要叶子的确切节点.
我想(根据例子):
_+v\_stat5a\_01_"和" _+v\_stat5b\_01_" 的边缘着色; 要么,rect()" _+v\_stat5a\_01_"和" _+v\_stat5b\_01_"我有以下本地函数("nodes-in-leafList-match-nodes-in-clusterList"条件的详细信息并不重要,但它突出显示了重要的节点):
markSignificantClusters <<- function (n) {
if (!is.leaf(n)) {
a <- attributes(n)
leafList <- unlist(dendrapply(n, listLabels))
for (clusterIndex in 1:length(significantClustersList[[1]])) {
clusterList <- unlist(significantClustersList[[1]][clusterIndex])
if (nodes-in-leafList-match-nodes-in-clusterList) {
# I now have a node "n" that contains significant leaves, and
# I'd like …Run Code Online (Sandbox Code Playgroud) 我试图将层次聚类的结果绘制R为树状图,矩形识别聚类.
下面的代码用于垂直树形图,但对于水平树形图(horiz=TRUE),不绘制矩形.有没有办法对水平树形图做同样的事情.
library("cluster")
dst <- daisy(iris, metric = c("gower"), stand = FALSE)
hca <- hclust(dst, method = "average")
plot(as.dendrogram(hca), horiz = FALSE)
rect.hclust(hca, k = 3, border = "red")
Run Code Online (Sandbox Code Playgroud)
此外,我想绘制一条线来切割所需距离值的树.如何在R中绘制该cutree函数.函数返回聚类,但是也可以绘制它.
cutree(hca, k = 3)
Run Code Online (Sandbox Code Playgroud)
我正在寻找的所需输出是这样的.

如何在R中完成这项工作?
我想创建一个带有水平标签的树状图,但让叶子根据其高度悬挂,而不是仅仅掉落到图的边缘。
例子:
par(mfrow = c(1,2))
hc <- hclust(dist(USArrests), "ave")
plot(hc) # a plot with hanging branches
plot(as.dendrogram(hc), horiz = TRUE) # a horizontal plot, but the branches are not hanging
Run Code Online (Sandbox Code Playgroud)

关于如何编程有什么建议吗?
谢谢。
有没有一种简单的方法可以在根处合并多个 hclust 对象(或树状图)?
我已经使示例尽可能完整来说明我的问题。
假设我想按区域对 USArrest 进行聚类,然后将所有 hclust 对象联合起来,将它们绘制在热图中。
USArrests
Northeast <- c("Connecticut", "Maine", "Massachusetts", "New Hampshire", "Rhode Island",
"Vermont", "New Jersey", "New York", "Pennsylvania")
Midwest <- c("Illinois", "Indiana", "Michigan", "Ohio", "Wisconsin",
"Iowa", "Kansas", "Minnesota", "Missouri", "Nebraska", "North Dakota",
"South Dakota")
South <- c("Delaware", "Florida", "Georgia", "Maryland", "North Carolina",
"South Carolina", "Virginia", "West Virginia",
"Alabama", "Kentucky", "Mississippi", "Tennessee", "Arkansas",
"Louisiana", "Oklahoma", "Texas")
West <- c("Arizona", "Colorado", "Idaho", "Montana", "Nevada", "New Mexico",
"Utah", "Wyoming", "Alaska", "California", "Hawaii", "Oregon", "Washington")
h1 <- …Run Code Online (Sandbox Code Playgroud) hclust ×10
r ×10
dendrogram ×5
dendextend ×2
distribution ×1
ggdendro ×1
heatmap ×1
label ×1
pheatmap ×1
plot ×1
size ×1