:)
我有一个问题,并没有通过个人搜索找到任何答案。 我想制作一个带有分类变量的热图(有点像这个:heatmap-like plot, but for categorical variables),我想在左侧添加一个系统发育树(就像这个:how to create a heatmap with a fixed external hierarchical cluster)。理想的是适应第二个,因为它看起来更漂亮! ;)
这是我的数据:
一个新的格式化的系统发育树,有3种,让我们说:
((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 =红色
答案 0 :(得分:0)
我实际上是自己想出来的。对于那些感兴趣的人,这是我的脚本:
#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
)
这是结果图:)
答案 1 :(得分:-1)
我正在尝试使用相同的语法和R包ape,gplots和RColorsBrewer来制作热图,其列树形图基本上是物种树。
但我无法继续阅读我的tre文件。尝试在读入的树文件上执行以下任何操作时会出现各种错误: a)情节,或 b)compute.brlen,和 c)在崩溃之后的情节。在物种树拓扑方面看起来完全被破坏了
我怀疑我的tre输入有问题,但不确定是什么。你会碰巧明白什么是错的,我怎么能解决它?谢谢!
<(>(((((((((Mt3.5v5,Mt4.0v1),Car),(((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))); < / p>