Как совместить филогенетическое дерево и тепловую карту? - PullRequest
0 голосов
/ 21 мая 2019

Мне нужно объединить филогенетическое дерево и тепловую карту, поэтому я пытался сделать то же самое, используя пакеты ggtree и phytools в R. Но я не добился успеха. Мои наборы данных приведены ниже,

((org1:0.03398193,org2:0.07721021)0.7400:0.00589058,org3:0.09199544,org4:0.09205519);
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 Коды приведены ниже,

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, я должен использовать какую-то другую функцию. пожалуйста, помогите мне сделать то же самое.

1 Ответ

1 голос
/ 21 мая 2019

Я нахожу решение, вы должны просто убрать все аргументы, приведенные Рэнди Гриффином в его посте, действительно, это делает ваше представление неверным.

Вам понадобятся следующие пакеты:

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:

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

Этот код используется для импорта данных:

df <- read_csv("stack.txt")
df <- as.data.frame(df)
rownames(df) <- df$x
df <- df[,-1]

Вам просто нужно изменить traits в df, потому что у вас есть правильное имя для строки и столбца.

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 по следующему адресу, чтобы узнать, как вручную построить объект, подобный объекту data.tree в R:

https://cran.r -project.org / веб / пакеты / APE / index.html

Это поможет вам в остальной части вашей работы и поможет нам также помочь вам.

Код вашего вопроса на данный момент неверен, и мы не можем знать, какое дерево вы хотите.

...