序列相似度热图heatmap
1、序列相似度矩阵
https://www.ebi.ac.uk/jdispatcher/
2、R语言脚本:序列相似度热图heatmap
D:\1CAAS\Lab\生物信息操作\进化树\1Cas12\Cas12O_VS_Casσ_Casj\heatmap\Cas12O_Casσ_Casj
R语言脚本:
点击查看代码
##########################################
#给fasta序列排序
library(Biostrings)
library(stringr)
#读入文件
fasta <- readAAStringSet("Cas12O_vs_Cas_Sigma_Cas12j.fasta") #如果是DNA序列可以用 readDNAStringSet
#查看原始顺序
names(fasta)
#排序
sorted_names <- str_sort(names(fasta), numeric = TRUE)
fasta_sorted <- fasta[match(sorted_names, names(fasta))]
#查看排序后顺序
names(fasta_sorted)
#保存
writeXStringSet(fasta_sorted, filepath = "sorted_Cas12O_vs_Cas_Sigma_Cas12j.fasta")
############################################
#处理成矩阵
#读取 Clustal Omega 输出的 percent identity matrix(纯文本格式)
#读取文件
lines <- readLines("percent_identity.txt")
#去掉空行或注释行(以 开头)
lines <- lines[!grepl("^\\s*$|^#", lines)]
#去掉首尾空白
lines <- trimws(lines)
#去掉第一列序号(如 1:, 2: 之类)
lines <- sub("^\\d+:\\s+", "", lines)
#按空格或制表符分割每一行
split_lines <- strsplit(lines, "[[:space:]]+")
#提取标签(序列名称)
labels <- sapply(split_lines, function(x) x[1])
#提取数值(去掉标签后剩下的就是 identity 数值)
values <- lapply(split_lines, function(x) as.numeric(x[-1]))
#转换为矩阵
mat <- do.call(rbind, values)
#设置行列名
rownames(mat) <- colnames(mat) <- labels
#这时再替换标签中的 cas 为 Cas(忽略大小写)
rownames(mat) <- sub("^(?i)cas", "Cas", rownames(mat), perl=TRUE)
colnames(mat) <- sub("^(?i)cas", "Cas", colnames(mat), perl=TRUE)
#如果不打算更换标签注释这行
#自然排序
library(stringr)
#标签自然排序(支持数字、大小写、特殊字符混排)
labels_sorted <- str_sort(rownames(mat), numeric = TRUE)
#labels_sorted <- str_sort(labels, numeric = TRUE)#如果不打算更换标签用这个,注释上行
#按自然排序后的标签重新排序矩阵的行和列
mat_sorted <- mat[labels_sorted, labels_sorted]
#输出为 CSV 文件
write.csv(mat_sorted, "percent_identity_matrix.csv")
###########################################
#加载pheatmap包
library(pheatmap)
library(grid)
#读取CSV文件,假设已经去掉百分号,转成纯数字矩阵identity_mat
identity_mat <- read.csv("percent_identity_matrix.csv", row.names = 1, stringsAsFactors = FALSE)
#如果还有百分号,先去掉再转数字:
identity_mat[] <- lapply(identity_mat, function(x) as.numeric(gsub("%", "", x)))
identity_mat <- as.matrix(identity_mat)
#绘制热图
png("heatmap.png", width = 2000, height = 2000, res = 150)
pheatmap(identity_mat,
cluster_rows = FALSE,
cluster_cols = FALSE,
display_numbers = FALSE,
color = colorRampPalette(c("white", "red"))(100),
main = "Cas12j vs Cas12O vs Casσ ",
legend = TRUE,
cellwidth = 10,#单元格的宽度
cellheight = 10,#单元格的高度
fontsize_row = 9,#行标签字体大小
fontsize_col = 9,#列标签字体大小
fontsize = 15) #图的基础字体大小
grid.text("Percent Identity", x = 0.93, y = 0.95, rot = 0, gp = gpar(fontsize = 12))
dev.off() #一定记得关闭设备,否则文件会空白

浙公网安备 33010602011771号