如何在 R 中将共识序列绘制为二进制热图

How can I plot consensus sequences as a binary heatmap in R

我有很多氨基酸序列,例如我进行多序列比对的 fasta 格式。我试图将二进制代码之类的东西绘制为热图。例如,如果它有变化,它将是红色的,如果没有变化,它将是黄色的。

我从 ggtree 包中遇到 msaplot。我还为此检查了 ggmsa 包。但到目前为止,我没有得到我想要的。 所以基本上我想:

  1. 将多序列比对更改为二进制矩阵(如果氨基与参考序列不同,绘制 x,如果不是 y)

  2. 绘制为热图

对于不知道的人来说,多序列比对是这样的。

我知道我应该提供某种类型的数据示例,但我不确定如何创建多序列比对示例

如果你安装 ggmsa 你可以在 r 中有一个数据和绘图的例子:

protein_sequences <- system.file("extdata", "sample.fasta", package = "ggmsa")
ggmsa(protein_sequences, start = 265, end = 300) 

我们在对齐中读到:

library(Biostrings)
library(ggmsa)
protein_sequences <- system.file("extdata", "sample.fasta", package = "ggmsa")
aln = readAAMultipleAlignment(protein_sequences)
ggmsa(protein_sequences, start = 265, end = 300) 

将参考设置为第一个序列,一些Rattus,您也可以使用consensusString()的共识:

aln = unmasked(aln)
names(aln)[1]
[1] "PH4H_Rattus_norvegicus"

ref = aln[1]

这里我们遍历序列并生成序列与参考相同的二进制文件:

bm = sapply(1:length(aln),function(i){
as.numeric(as.matrix(aln[i])==as.matrix(ref))
})

bm = t(bm)
rownames(bm) = names(aln)

你在上面看到的情节有颠倒的顺序,所以为了形象化我们颠倒它的同一件事,并且还在 265 - 300 上设置子集:

library(pheatmap)
pheatmap(bm[nrow(bm):1,265:300],cluster_rows=FALSE,cluster_cols=FALSE)

最后一行是 Rattus,参考文献,以及任何与此类似的内容,如您在上面的比对中所见,最后 4 个序列是相同的。