【发布时间】:2017-03-29 16:54:06
【问题描述】:
我正在迁移几天前在ggtree's google forum 中提出的问题。由于 SO 社区更大,更重要的是,由于我必须继续我的项目,所以我正在尝试这里的某个人可能会有答案。我正在绘制一个系统发育树,其中树枝的颜色对应于物种。我的树有基因渗入。这意味着:同一物种的所有个体可能不会连接到树中的唯一节点,而是分散在它周围。为了反映这种差异,我想对属于同一物种的一组个体(所谓的操作分类单位或 OTU)进行分组,直到发现冲突为止。
例如,在下面的图中(没有基因渗入),t3、t4 和 t10 属于“绿色”OTU,而 t1、t2、t7 和 t8 属于“红色”OTU。一旦这些不同的 OTU 命中树中的同一个节点,剩余的分支就会变为黑色。
library(ggtree)
set.seed(123)
tree <- rtree(10)
cls <- list(c1=c("t1", "t2","t8","t7"),
c2=c("t3", "t4", "t10"),
c3=c( "t9","t6","t5"))
tree <- groupOTU(tree, cls)
ggtree(tree, aes(color=group)) + geom_text(aes(label=label)) +
scale_color_manual(values=c("black", "red","green","blue")) +
theme(legend.position="right")
这是我想要的明确定义的 OTU 的行为,不幸的是,一旦将基因渗入添加到等式中,并且不同物种的个体分布在整个树中,ggtree 似乎会根据某种多数共识为冲突的分支分配颜色(左边的情节)。在下图中,“绿色”物种的一部分 f1 已经渗入了“红色”物种的个体。由于连接 t1 和 t2 的节点标志着系统发育中的差异,我想将剩余的边缘涂成黑色,直到原点(右图)。
library(ggtree)
set.seed(123)
tree <- rtree(10)
cls <- list(c1=c( "t2","t8","t7"),
c2=c("t3", "t4", "t10","t1"),
c3=c( "t9","t6","t5"))
tree <- groupOTU(tree, cls)
ggtree(tree, aes(color=group)) + geom_text(aes(label=label)) +
scale_color_manual(values=c("black", "red","green","blue")) +
theme(legend.position="right")
在冲突后将边缘涂成黑色不仅很糟糕。从科学的角度来看是误导。有没有办法解决这个问题并获得正确的情节?
编辑-------
如果您可以使用 Python ETE 工具包做到这一点,我很乐意听取您的意见...
【问题讨论】:
标签: python r python-2.7 python-3.x ggplot2