如何使用R绘制图表可视化并分组相似耐药模式?
耐药模式相似性分组与可视化实现方案
1. 数据预处理
首先统一所有样本的耐药模式长度(部分样本如G只有5位,需补全到最长的9位,默认补S):
library(tidyverse) library(stringr) library(dendextend) library(pheatmap) # 读取原始数据 dat <- read.table(text="Id Resistance.Pattern A SSRRSSSSR B SSSRSSSSR C RRRRSSRRR D SSSSSSSSS E SSRSSSSSR F SSSRRSSRR G SSSSR H SSSSSSRRR I RRSSRRRSS", header=TRUE) # 补全耐药模式至9位,右侧补S dat <- dat %>% mutate(Resistance.Pattern = str_pad(Resistance.Pattern, width = 9, side = "right", pad = "S"))
2. 转换为二进制矩阵
将耐药模式拆分为单个位点,把S转为0、R转为1,构建数值矩阵用于计算相似性:
resist_matrix <- dat %>% separate_rows(Resistance.Pattern, sep = "") %>% filter(Resistance.Pattern != "") %>% group_by(Id) %>% mutate(position = row_number()) %>% ungroup() %>% pivot_wider(names_from = position, values_from = Resistance.Pattern) %>% column_to_rownames("Id") %>% mutate(across(everything(), ~ifelse(. == "R", 1, 0)))
3. 计算相似性并聚类
用汉明距离衡量样本间耐药模式的差异(距离越小,模式越相似),再通过层次聚类分组:
# 计算标准化汉明距离 resist_dist <- dist(resist_matrix, method = "manhattan") / ncol(resist_matrix) # 层次聚类(ward.D2方法优化组内方差) resist_clust <- hclust(resist_dist, method = "ward.D2") # 绘制聚类树状图 dend <- as.dendrogram(resist_clust) plot(dend, main = "耐药模式相似性聚类树状图", xlab = "样本ID")
4. 可视化相似性热图
结合聚类结果绘制热图,直观展示每个样本的耐药模式及分组关系:
pheatmap(resist_matrix, clustering_distance_rows = resist_dist, clustering_method = "ward.D2", main = "耐药模式相似性热图", labels_row = rownames(resist_matrix), show_colnames = FALSE, color = c("#FFFFFF", "#E63946"), # 白色=敏感S,红色=耐药R treeheight_row = 20)
说明
- 汉明距离适合二进制(二元)数据的相似性度量,能精准反映两个耐药模式的位点差异
- ward.D2聚类方法会优先合并组内方差最小的类,让分组更合理
- 热图+树状图的组合既能看到单个样本的耐药情况,也能清晰分辨相似模式的分组
内容的提问来源于stack exchange,提问作者YASIR AA
相关产品推荐
相关产品推荐

