首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将系统树和热图结合起来?

如何将系统树和热图结合起来?
EN

Stack Overflow用户
提问于 2019-05-21 18:57:12
回答 1查看 1.8K关注 0票数 0

我需要将系统发生树和热图结合起来,所以我一直在尝试使用R中的ggtree和phytools包来做同样的事情,但是,我没有成功。我的数据集如下所示,

代码语言:javascript
复制
((org1:0.03398193,org2:0.07721021)0.7400:0.00589058,org3:0.09199544,org4:0.09205519);
代码语言:javascript
复制
data.csv
x       x1  x2  x3  x4  x5
org1    50  20  40  70  50
org2    10  15  60  78  20  
org3    40  50  40  70  20
org4    80  50  40  20  30

以下教程采用的代码,http://www.randigriffin.com/2017/05/11/primate-phylogeny-ggtree.html代码如下:

代码语言:javascript
复制
tree = read.tree(text = "org1:0.03398193,org2:0.07721021)0.7400:0.00589058,org3:0.09199544,org4:0.09205519);")
d <- data.frame(read.csv("data.csv"))
traits <- data.frame(d, fastBM(tree))
p8 <- ggtree(tree) +  xlim(0, 125) + geom_tiplab(size = 2, offset = 17)
p9 <- gheatmap(p8, traits, offset = 0.2, width = 0.2, low = "white", high = "black", colnames_position = "top", font.size = 2)

当我遵循相同的代码而不做任何更改时,它工作得非常好。但是,当我尝试处理我的数据时,它显示错误。我不知道如何使用fastBM将我的树与数据文件结合起来。我想我应该使用其他函数而不是fastBM。请帮我做同样的事情。

EN

回答 1

Stack Overflow用户

发布于 2019-05-21 20:09:51

我找到了一个解决方案,你应该把Randi Griffin在他的帖子中提出的所有论点都放在一边,这确实会让你的陈述变得错误。

您将需要以下软件包:

代码语言:javascript
复制
library(ape)
library(dplyr)
library(phytools)

# install from Bioconductor
source("https://bioconductor.org/biocLite.R")
biocLite("ggtree")

library(ggtree)


tree <- read.tree(text = "(org1:1, org2:1, (org3:0.15, org4:0.15):0.8500);")
traits <- data.frame(fastBM(tree, nsim=5))

plot(tree)

p8 <- ggtree(tree) +
  geom_tiplab(size=2) 

# add heatmap
p9 <-  gheatmap(p8,
                traits,
                offset=0.2, low="white", high="black", colnames_position = "top", font.size=2)

p9

此建议适用于具有相同分支长度的树。但它也适用于不同的长度。实际上,在他的示例中,他使用了xlim(0, 125),因为他的边长度最多为40,但在您的示例中,边长度更小。因此,最好让R函数为您的图找到最佳极限值。

使用R更容易导入以下格式为',‘的数据:

代码语言:javascript
复制
x,x1,x2,x3,x4,x5
org1,50,20,40,70,50
org2,10,15,60,78,20  
org3,40,50,40,70,20
org4,80,50,40,20,30

此代码用于导入数据:

代码语言:javascript
复制
df <- read_csv("stack.txt")
df <- as.data.frame(df)
rownames(df) <- df$x
df <- df[,-1]

您只需要在df中更改traits,因为您拥有正确的行和列名称。

代码语言:javascript
复制
p8 <- ggtree(tree) +
  geom_tiplab(size=2) 


# add heatmap
p9 <-  gheatmap(p8,
                df,
                offset=0.2, low="white", high="black", colnames_position = "top", font.size=2)

p9

您可以在以下地址查看ape包vignette,以了解如何手动构建,就像您希望在R中创建data.tree对象一样:

https://cran.r-project.org/web/packages/ape/index.html

它将帮助您完成剩下的工作,它也将帮助我们帮助您。

您的问题代码暂时不正确,我们无法知道您需要哪棵树。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56236799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档