改变plot.dendrogram中的叶子颜色,类似于包装猿的plot.phylo
我试图以与使用“ape”包绘制树时相同的“样式”绘制聚集聚类(带Agnes的UPGMA)的结果。下图中包含了一个简单的示例 关键问题是,我希望能够根据树叶标签中的a模式为树状图的树叶着色。我尝试了两种方法:要么我使用了改变plot.dendrogram中的叶子颜色,类似于包装猿的plot.phylo,r,dendrogram,ape,col,dendextend,R,Dendrogram,Ape,Col,Dendextend,我试图以与使用“ape”包绘制树时相同的“样式”绘制聚集聚类(带Agnes的UPGMA)的结果。下图中包含了一个简单的示例 关键问题是,我希望能够根据树叶标签中的a模式为树状图的树叶着色。我尝试了两种方法:要么我使用了hc2Newick,要么我使用了Joris Meys在回答问题时提出的代码。两者都没有给出令人满意的结果。这可能是因为我也不完全理解树状图的构造方式。可以在上找到funtity.agnes.ave对象(从运行agnes存储)的ASCII保存 当我使用第一个选项时(使用biocon
hc2Newick
,要么我使用了Joris Meys在回答问题时提出的代码。两者都没有给出令人满意的结果。这可能是因为我也不完全理解树状图的构造方式。可以在上找到funtity.agnes.ave
对象(从运行agnes存储)的ASCII保存
当我使用第一个选项时(使用bioconductor的ctc
软件包中的hc2Newick
),我在使用此代码时得到下图:
write(hc2Newick(as.hclust(abundance.agnes.ave)),file="all_samples_euclidean.tre")
eucltree<-read.tree(file="all_samples_euclidean.tre")
eucltree.laz<-ladderize(eucltree,FALSE)
tiplabs<-eucltree$tip.label
numbertiplabs<-length(tiplabs)
colourtips<-rep("green",numbertiplabs)
colourtips[grep("II",tiplabs)]<-"red"
plot(eucltree.laz,tip.color=colourtips,adj=1,cex=0.6,use.edge.length=F)
add.scale.bar()
这个图越来越接近我想要的,但是我不知道为什么叶子上会出现开放的圆圈,以及如何去除它们
非常感谢您的帮助
亲切问候,
FM我很久以前写过这段代码,看起来机制中有点变化 我使用的
plot.dendrogram
函数有一个参数nodePar
。自从我上次使用该函数以来,行为发生了变化,尽管这通常用于内部节点,但显然对外部节点也有影响。根据帮助文件,pch
的默认值现在是1:2
因此,您需要在添加到colLab
函数的外部节点的属性中特别指定pch=NA
。试着这样做:
colLab <- function(n)
{
if(is.leaf(n)) {
a <- attributes(n)
# clusMember - a vector designating leaf grouping
# labelColors - a vector of colors for the above grouping
labCol <- labelColors[clusMember[which(names(clusMember) == a$label)]]
attr(n, "nodePar") <-
if(is.list(a$nodePar)) c(a$nodePar, lab.col = labCol,pch=NA) else
list(lab.col = labCol,pch=NA)
}
n
}
colLab这项功能现在可以在一个名为“”的新软件包中使用,该软件包正是为这类事情而构建的
在以下URL的“用法”部分,您可以在软件包的演示文稿和案例中看到许多示例:
下面的问题回答了一个几乎完全相同的问题:
Joris,谢谢您的回复。在我的机器上,这也解决了这个问题。关于你对use.edge.length
的评论,我已经编辑了我的原始帖子,显示我使用它得到了一个不理想的结果。我得承认,我对细节还有些模糊。例如,如果我将lab.cex
添加到节点的属性(例如attr(n,“nodePar”)感谢您的更新,我将很快调查您的包的使用情况。事实上,我只是在寻找一种可能性,使'缠结图'显示在您的小插曲!不客气。此外,如果您将创建一些与包-请考虑电子邮件给我关于你的工作(我的联系是在包GITHUB主页)。我渴望展示使用此代码的真实案例研究的示例,因此我很乐意推广您的工作。祝你好运,塔尔加利利
colLab <- function(n)
{
if(is.leaf(n)) {
a <- attributes(n)
# clusMember - a vector designating leaf grouping
# labelColors - a vector of colors for the above grouping
labCol <- labelColors[clusMember[which(names(clusMember) == a$label)]]
attr(n, "nodePar") <-
if(is.list(a$nodePar)) c(a$nodePar, lab.col = labCol,pch=NA) else
list(lab.col = labCol,pch=NA)
}
n
}