如何用R的Dendrogram(或其他方法)绘制相同编号的个体ID图
用树状图可视化具有相同抗性编号的个体
要实现按抗性编号聚类并生成树状图,可按以下步骤操作:
1. 正确读取数据(保留前导零)
由于抗性编号包含前导零,需指定其为字符类型,避免被自动转换为数值丢失前导信息:
dat <- read.table(text="Id Resistance.Number A 0405611540527610 B 6607734653564010 C 0405611540527610 D 030402066763231 E 0405611540527610 F 4417610555422211 G 0043551103500252 H 1043453103501272 I 030402066763231", header=TRUE, colClasses=c("character", "character"))
2. 构建自定义距离矩阵
我们定义:相同抗性编号的个体距离为0,不同编号的个体距离为1,以此构建距离矩阵:
dist_mat <- outer(dat$Resistance.Number, dat$Resistance.Number, function(x, y) as.integer(x != y)) rownames(dist_mat) <- dat$Id colnames(dist_mat) <- dat$Id
3. 层次聚类
使用**single linkage(最短距离法)**进行聚类,确保相同编号的个体优先聚为一类:
hc <- hclust(as.dist(dist_mat), method = "single")
4. 绘制树状图
生成树状图,并可添加彩色方框标记不同编号的聚类组:
# 基础树状图 plot(hc, main = "个体按抗性编号聚类树状图", xlab = "个体ID", ylab = "距离", sub = "", cex = 0.8) # 可选:用彩色方框区分不同编号组 groups <- as.factor(dat$Resistance.Number) k <- length(unique(groups)) rect.hclust(hc, k = k, border = rainbow(k))
运行上述代码后,树状图会清晰展示:所有具有相同抗性编号的个体(如A、C、E;D、I)会被聚为同一分支,不同编号的个体则处于独立分支。
内容的提问来源于stack exchange,提问作者YASIR AA
相关产品推荐
相关产品推荐

