Тепловая карта с категориальными переменными и филогенетическим деревом в R

:)

У меня есть вопрос, на который личным поиском не нашел ответа. Я хотел бы создать тепловую карту с категориальными переменными (немного похожую на эту: тепловая карта -подобный сюжет, но для категориальных переменных), и я хотел бы добавить слева филогенетическое дерево (например, это: как создать тепловую карту с фиксированным внешним иерархическим кластером). Идеально было бы адаптировать вторую, так как она выглядит намного красивее! ;)

Вот мои данные:

  • Филогенетическое дерево в формате newick с тремя видами, скажем:

    ((1,2),3);
    
  • фрейм данных:

    x<-c("species 1","species 2","species 3")
    y<-c("A","A","C")
    z<-c("A","B","A")
    df<- data.frame(x,y,z)
    

(где A, B и C являются категориальными переменными, например, в моем случае наличие / отсутствие / дублированный ген).

Вы бы знали, как это сделать?

Спасибо заранее!


РЕДАКТИРОВАТЬ: Я хотел бы иметь возможность выбирать цвет каждой из категорий на тепловой карте, а не классическую градацию. Скажем, A = зеленый, B = желтый, C = красный


person tlorin    schedule 12.03.2015    source источник
comment
Вы знаете, как сделать дендрограмму? Для тепловой карты вы можете сопоставить категориальные значения с чем-то числовым и построить это в виде матрицы.   -  person Roman Luštrik    schedule 12.03.2015
comment
Да, дендрограмму я уже делал! mytree <-read.tree("sometree.tre") #turn the phylo tree to a dendrogram object data(mytree) #This is already a phylo object hc <- as.hclust(mytree) #Compulsory step as as.dendrogram doesn't have a method for phylo objects. dend <- as.dendrogram(hc) plot(dend, horiz=TRUE)   -  person tlorin    schedule 12.03.2015
comment
Но если я сопоставлю числовые значения, могу ли я вручную выбрать цвет для каждой категории?   -  person tlorin    schedule 12.03.2015
comment
Конечно, вы можете выбрать собственные цвета (множество вариантов того, как это сделать).   -  person Roman Luštrik    schedule 12.03.2015


Ответы (2)


Я на самом деле разобрался сам. Для тех, кому интересно, вот мой сценарий:

#load packages
library("ape")
library(gplots)

#retrieve tree in newick format with three species
mytree <- read.tree("sometreewith3species.tre")
mytree_brlen <- compute.brlen(mytree, method="Grafen") #so that branches have all same length


#turn the phylo tree to a dendrogram object
hc <- as.hclust(mytree_brlen) #Compulsory step as as.dendrogram doesn't have a     method for phylo objects.
dend <- as.dendrogram(hc)
plot(dend, horiz=TRUE) #check dendrogram face

#create a matrix with values of each category for each species
a<-mytree_brlen$tip
b<-c("gene1","gene2")
list<-list(a,b)
values<-c(1,2,1,1,3,2)  #some values for the categories (1=A, 2=B, 3=C)
mat <- matrix(values,nrow=3, dimnames=list) #Some random data to plot

#plot the hetmap
heatmap.2(mat, Rowv=dend, Colv=NA, dendrogram='row',col =
        colorRampPalette(c("red","green","yellow"))(3), 
          sepwidth=c(0.01,0.02),sepcolor="black",colsep=1:ncol(mat),rowsep=1:nrow(mat),
      key=FALSE,trace="none",
      cexRow=2,cexCol=2,srtCol=45,
      margins=c(10,10),
      main="Gene presence, absence and duplication in three species")


#legend of heatmap
par(lend=2)           # square line ends for the color legend
legend("topright",      # location of the legend on the heatmap plot
   legend = c("gene absence", "1 copy of the gene", "2 copies"), # category  labels
   col = c("red", "green", "yellow"),  # color key
   lty= 1,             # line style
   lwd = 15            # line width
)

и вот результат :) введите описание изображения здесь

person tlorin    schedule 12.03.2015
comment
Наконец-то мне хватило репутации! Вот результат: - person tlorin; 21.04.2015

Я пытаюсь использовать тот же синтаксис и пакеты R ape, gplots и RColorsBrewer, чтобы создать тепловую карту, дендрограмма столбцов которой, по сути, является деревом видов.

Но я не могу продолжить чтение моего файла tre. При попытке выполнить любую из следующих операций с файлом дерева, прочитанным в нем, возникают различные ошибки: a) plot, или b) compute.brlen, и c) plot после collapse.singles выглядит полностью искаженным с точки зрения топологии дерева видов.

Я подозреваю, что что-то не так с моим вводом tre, но не знаю, что именно. Сможете ли вы понять, что не так и как я могу это исправить? Спасибо!

(((((((((((((Mt3.5v5, Mt4.0v1), Автомобиль), (((Pvu186, Pvu218), (Gma109, Gma189)), Cca))), (((Ppe139, Mdo196), Fve226), Csa122)), ((((((((Ath167, Aly107), Cru183), (Bra197, Tha173)), Cpa113), (Gra221, Tca233)), (Csi154, (Ccl165, Ccl182) ))), ((Mes147, Rco119), (Lus200, (Ptr156, Ptr210)))), Egr201)), Vvi145), ((Stu206, Sly225), Mgu140)), Aco195), (((Sbi79, Zma181 ), (Sit164, Pvi202)), (Osa193, Bdi192))), Smo91), Ppa152), (((Cre169, Vca199), Csu227), ((Mpu228, Mpu229), Olu231)));

person AksR    schedule 04.06.2015