我有两个树形图,我希望相互比较,以找出它们是如何"相似".但我不知道有任何方法可以这样做(更不用说实现它的代码了,比方说,在R中).
任何线索?
更新(2014-09-13):
自从提出这个问题以来,我编写了一个名为dendextend的R包,用于树形图的可视化,操作和比较.此软件包在CRAN上,附带详细的插图.它包括诸如cor_cophenetic
,cor_bakers_gamma
和Bk
/ Bk_plot
.以及tanglegram
用于在视觉上比较两棵树的功能.
我正在尝试创建一个树形图,我的样本有5个组代码(作为样本名称/种类/等,但重复).
因此,我有两个问题,帮助将是伟大的:
如何在叶标签中显示组代码(而不是样本编号)?
我希望为每个代码组分配一种颜色并根据它对叶子标签着色(可能会发生它们不在同一个分支中,我可以找到更多信息)?
是否可以使用我的脚本执行此操作(ape或ggdendro):
sample<-read.table("C:/.../DOutput.txt", header=F, sep="")
groupCodes <- sample[,1]
sample2<-sample[,2:100]
d <- dist(sample2, method = "euclidean")
fit <- hclust(d, method="ward")
plot(as.phylo(fit), type="fan")
ggdendrogram(fit, theme_dendro=FALSE)
Run Code Online (Sandbox Code Playgroud)
随机数据框替换我的read.table:
sample = data.frame(matrix(floor(abs(rnorm(20000)*100)),ncol=200))
groupCodes <- c(rep("A",25), rep("B",25), rep("C",25), rep("D",25)) # fixed error
sample2 <- data.frame(cbind(groupCodes), sample)
Run Code Online (Sandbox Code Playgroud) 我正试图从R中的树状图中提取出一个我cut
在某个高度的分类.这cutree
在一个hclust
对象上很容易做到,但我无法弄清楚如何在一个dendrogram
对象上做到这一点.
此外,我不能只使用原始hclust中的集群,因为(令人沮丧地),类cutree
的编号与类的编号不同cut
.
hc <- hclust(dist(USArrests), "ave")
classification<-cutree(hc,h=70)
dend1 <- as.dendrogram(hc)
dend2 <- cut(dend1, h = 70)
str(dend2$lower[[1]]) #group 1 here is not the same as
classification[classification==1] #group 1 here
Run Code Online (Sandbox Code Playgroud)
有没有办法让分类相互映射,或者从dendrogram
对象中提取较低的分支成员资格(可能有一些巧妙的使用dendrapply
?),格式更像是cutree
给出的?
我试图提取聚类中使用的颜色circlize_dendrogram
.这是一个示例代码:
library(magrittr)
library(dendextend)
cols <- c("#009000", "#FF033E", "#CB410B", "#3B444B", "#007FFF")
dend <- iris[1:40,-5] %>% dist %>% hclust %>% as.dendrogram
dend <- color_branches(dend, k = 5, col = cols)
dend %<>% set("labels_col", value = cols, k= 5)
dend %<>% set("labels_cex", .8)
dend %<>% set("branches_lwd", 2)
circlize_dendrogram(dend)
Run Code Online (Sandbox Code Playgroud)
以便使用提取列表簇cutree(dend, k = 5)
.有没有办法根据cols
给定的?提取树形图中簇的颜色?我需要它来使用grid
包在图中插入图例.
示例,图例:群集1 - #009000
; 集群2 - #FF033E
; 集群3 - #CB410B
; 集群4 - #3B444B
; 集群5 - #007FFF
.问题circlize_dendrogram
是用于群集的颜色的顺序是不同的.
虽然我可以手动执行此操作,但如果我可以自动执行此操作会很有效.如果我可以提取簇的颜色,这是可能的.
我正在使用dendextend在R中绘制Tanglegrams.我想知道是否有可能使用多个子图par(mfrow = c(2,2))
?
我似乎无法弄明白.
谢谢
library(dendextend)
dend15 <- c(1:5) %>% dist %>% hclust(method = "average") %>% as.dendrogram
dend15 <- dend15 %>% set("labels_to_char")
dend51 <- dend15 %>% set("labels", as.character(5:1)) %>% match_order_by_labels(dend15)
dends_15_51 <- dendlist(dend15, dend51)
par(mfrow = c(2,2))
tanglegram(dends_15_51)
tanglegram(dends_15_51)
tanglegram(dends_15_51)
tanglegram(dends_15_51)
Run Code Online (Sandbox Code Playgroud) 我想在R中创建一个树状图,它有彩色分支,如下图所示.
到目前为止,我使用以下命令创建标准树形图:
d <- dist(as.matrix(data[,29])) # find distance matrix
hc <- hclust(d) # apply hirarchical clustering
plot(hc,labels=data[,1], main="", xlab="") # plot the dendrogram
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中完成这项工作?
我使用下面的代码在R中运行层次聚类分析后生成了一个树形图.我现在尝试根据另一个因子变量为标签着色,该变量保存为矢量.我实现这一目标的最接近的方法是使用包中的ColourDendrogram
函数对分支进行颜色编码sparcl
.如果可能的话,我更愿意对标签进行颜色编码.我在以下链接中找到了类似问题的答案在树形图中使用现有列和着色分支的树形图的颜色分支,但是我还没有能够找到如何为我的目的转换示例代码.下面是一些示例数据和代码.
> dput(df)
structure(list(labs = c("a1", "a2", "a3", "a4", "a5", "a6", "a7",
"a8", "b1", "b2", "b3", "b4", "b5", "b6", "b7"), var = c(1L,
1L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 1L, 2L, 2L, 2L), td = c(13.1,
14.5, 16.7, 12.9, 14.9, 15.6, 13.4, 15.3, 12.8, 14.5, 14.7, 13.1,
14.9, 15.6, 14.6), fd = c(2L, 3L, 3L, 1L, 2L, 3L, 2L, 3L, 2L,
4L, 2L, 1L, 4L, 3L, 3L)), …
Run Code Online (Sandbox Code Playgroud) I have done a Heat Map using the function heatmap.2
of gplots
in R, but I don't have an idea of how to coloring the branches and tick labels per groups (Eg. if I cut the tree to have four gruops like in my second figure). I have checked that it is possible to color the dendrogram alone using dendextend
package.
Also there is a heatmap here: selecting number of leaf nodes of dendrogram in heatmap.2 in R with a …
我正在尝试使用ape包中的plot.phylo命令为R中的系统发育类型图的边(线)添加颜色.这个例子是针对"粉丝"类型的情节,虽然我希望这种方法与"phylogram类型"或其他类似.
library('ape')
hc <- hclust(dist(USArrests), "ave")
plot(as.phylo(hc), type="fan")
Run Code Online (Sandbox Code Playgroud)
使用tip.color选项与cutree命令相结合,基于一组组向提示(标签)添加颜色是没有问题的.
hc.cuts <- cutree(hc, k=5)
plot(as.phylo(hc), type="fan", tip.color=rainbow(5)[hc.cuts])
Run Code Online (Sandbox Code Playgroud)
edge.color选项定义边缘的颜色,但在需要许多颜色时不以logincal方式定义.
plot(as.phylo(hc), type="fan", tip.color=rainbow(5)[hc.cuts], edge.color=rainbow(5)[hc.cuts])
Run Code Online (Sandbox Code Playgroud)
但是,一旦树形图的分支指定给定的组,我希望边缘匹配终端尖端颜色.在给定的示例中,朝向红色和蓝色组,第一级边缘将保持黑色(因为它朝向两组:红色和蓝色),但是超出此范围的边缘将与最终的尖端颜色相同.
我怀疑关键在于弄清楚as.phylo对象中$ edge值的排序,但我自己无法想象.谢谢.
dendextend ×10
r ×10
dendrogram ×9
plot ×2
colors ×1
ggdendro ×1
gplots ×1
hclust ×1
heatmap ×1
phylogeny ×1
statistics ×1
tree ×1