Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
改变plot.dendrogram中的叶子颜色,类似于包装猿的plot.phylo_R_Dendrogram_Ape_Col_Dendextend - Fatal编程技术网

改变plot.dendrogram中的叶子颜色,类似于包装猿的plot.phylo

改变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

我试图以与使用“ape”包绘制树时相同的“样式”绘制聚集聚类(带Agnes的UPGMA)的结果。下图中包含了一个简单的示例

关键问题是,我希望能够根据树叶标签中的a模式为树状图的树叶着色。我尝试了两种方法:要么我使用了
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
}