如何在系统发育树上调整尖端标签相对于树尖端的位置?
How can I adjust the position of tip labels relative to tree tips on a phylogenetic tree?
我正在尝试使用 R
中的 ape
和 phytools
包在系统发育树上创建一个连续性状图的图,用于发布。我尝试生成的示例代码如下:
library("ape")
library("phytools")
orig_tree<-rtree(n=350)
plot(orig_tree)
values<-data.frame("residuals"=runif(350,min=-1,max=1),row.names=orig_tree$tip.label)
values<-setNames(values$residuals,rownames(values))
residualsignalfit<-fastAnc(orig_tree,values,vars=TRUE,CI=TRUE)
obj<-contMap(orig_tree,values,plot=FALSE)
plot(obj,type="fan",fsize=.1,lwd=0.5)
唯一的区别是分支的末端都是相同的长度,因为它们都是活的分类群,但这足以说明我遇到的问题。我在这棵树中有大量的分类单元,因此我必须使用 fsize=
参数将文本缩小得相当小,以使其清晰可辨。但是,正如您从示例代码中看到的那样,这样做会导致每个物种名称的末尾被系统发育树的轮廓所遮盖。我试过删除轮廓,但这使得系统发育的热图很难阅读。一直没找到减少轮廓粗细的方法,好像是自动生成的。
我也试过在plot(obj...)
中添加cex
命令,但是对生成的树完全没有影响
我想弄清楚如何做的是如何定位尖端标签以使它们更清晰并且不被树的轮廓覆盖。我不能简单地使用 dplyr
mutate
函数或类似的东西在每个终端前面添加一个 space 因为类群名称的位置并不总是一致的,有时是左侧名称附在尖端上,有时是右侧。我试过不将数据绘制成扇形,但这最终会创建一个有大量死亡 space 的图形,因为我在树中有一些非常深的分裂(基本上将图形绘制为正确的-facing tree 导致一半的人物死亡 space 因为我的分类群在中生代分化但仅在 K-T 边界之后形成)。
您可以放大树,而不是缩小文本。您可以将绘图导出为具有特定宽度和高度的图像。将两者都设置为 20 应该会使所有提示标签清晰可见。
类似
setEPS()
postscript("output.eps", width = 20, height = 20)
plot(obj,type="fan",lwd=0.5)
dev.off()
这会将绘图保存到 output.eps
,而不是在默认查看器中显示。所以它不受屏幕尺寸的限制。你仍然需要 fiddle 和 lwd
和 fsize
的最佳值,但根据我的经验,当你有一个大的 canvas.[=16 时,这会容易得多=]
编辑:抱歉,width
和height
的单位是英寸而不是像素。所以最好将它设置为 10 或 20。
我正在尝试使用 R
中的 ape
和 phytools
包在系统发育树上创建一个连续性状图的图,用于发布。我尝试生成的示例代码如下:
library("ape")
library("phytools")
orig_tree<-rtree(n=350)
plot(orig_tree)
values<-data.frame("residuals"=runif(350,min=-1,max=1),row.names=orig_tree$tip.label)
values<-setNames(values$residuals,rownames(values))
residualsignalfit<-fastAnc(orig_tree,values,vars=TRUE,CI=TRUE)
obj<-contMap(orig_tree,values,plot=FALSE)
plot(obj,type="fan",fsize=.1,lwd=0.5)
唯一的区别是分支的末端都是相同的长度,因为它们都是活的分类群,但这足以说明我遇到的问题。我在这棵树中有大量的分类单元,因此我必须使用 fsize=
参数将文本缩小得相当小,以使其清晰可辨。但是,正如您从示例代码中看到的那样,这样做会导致每个物种名称的末尾被系统发育树的轮廓所遮盖。我试过删除轮廓,但这使得系统发育的热图很难阅读。一直没找到减少轮廓粗细的方法,好像是自动生成的。
我也试过在plot(obj...)
中添加cex
命令,但是对生成的树完全没有影响
我想弄清楚如何做的是如何定位尖端标签以使它们更清晰并且不被树的轮廓覆盖。我不能简单地使用 dplyr
mutate
函数或类似的东西在每个终端前面添加一个 space 因为类群名称的位置并不总是一致的,有时是左侧名称附在尖端上,有时是右侧。我试过不将数据绘制成扇形,但这最终会创建一个有大量死亡 space 的图形,因为我在树中有一些非常深的分裂(基本上将图形绘制为正确的-facing tree 导致一半的人物死亡 space 因为我的分类群在中生代分化但仅在 K-T 边界之后形成)。
您可以放大树,而不是缩小文本。您可以将绘图导出为具有特定宽度和高度的图像。将两者都设置为 20 应该会使所有提示标签清晰可见。
类似
setEPS()
postscript("output.eps", width = 20, height = 20)
plot(obj,type="fan",lwd=0.5)
dev.off()
这会将绘图保存到 output.eps
,而不是在默认查看器中显示。所以它不受屏幕尺寸的限制。你仍然需要 fiddle 和 lwd
和 fsize
的最佳值,但根据我的经验,当你有一个大的 canvas.[=16 时,这会容易得多=]
编辑:抱歉,width
和height
的单位是英寸而不是像素。所以最好将它设置为 10 或 20。