如何将单倍型网络中的单倍型标签替换为样本名称
单倍型网络标签替换为样本名称的解决方案
需求说明
绘制的单倍型网络中每个样本对应唯一单倍型,希望将网络圆圈的单倍型标签(如VIII)替换为样本名称(如D20B1),无需额外图例,仅保留网络结构和样本名称标签。
现有资源
绘图代码
plot(net, size=attr(net, "freq"),scale.ratio = 1, cex = 1, labels=T, pie = ft, font=3, fast=T, threshold=0, show.mutation = 3, legend=F ) y_coord = ( par("usr")[4]) - (par("usr")[4]*0.01) legend_coord = c((par("usr")[1]), y_coord) #plot the legend legend(x=legend_coord[1], y=legend_coord[2], unique(sort(sites$site)), fill=rainbow(length(unique(sites$site))), bty="n", cex=1)
net对象结构
structure(c(5, 6, 7, 8, 9, 11, 7, 13, 2, 3, 10, 12, 3, 3, 3, 3, 3, 3, 4, 7, 1, 1, 4, 4, 2, 2, 2, 2, 2, 2, 2, 3, 4, 4, 4, 7, 0.997829760277465, 0.997829760277465, 0.997829760277465, 0.997829760277465, 0.997829760277465, 0.997829760277465, 0.997829760277465, 0.996746407283241, 0.995664230495361, 0.995664230495361, 0.995664230495361, 0.992424744601474 ), dim = c(12L, 4L), dimnames = list(NULL, c("", "", "step", "Prob")), freq = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), labels = c("I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII", "XIII"), alter.links = structure(c(6, 7, 8, 11, 7, 8, 9, 11, 8, 9, 11, 11, 5, 6, 7, 8, 11, 4, 5, 6, 8, 9, 11, 9, 10, 9, 11, 13, 13, 13, 13, 13, 13, 13, 4, 9, 7, 11, 10, 10, 10, 10, 10, 11, 13, 12, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 8, 1, 1, 1, 1, 1, 3, 4, 4, 4, 4, 4, 5, 6, 8, 9, 3, 4, 5, 6, 8, 9, 11, 1, 1, 2, 2, 3, 5, 7, 8, 9, 10, 1, 10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 0.997829760277465, 0.997829760277465, 0.997829760277465, 0.997829760277465, 0.997829760277465, 0.997829760277465, 0.997829760277465, 0.997829760277465, 0.997829760277465, 0.997829760277465, 0.997829760277465, 0.997829760277465, 0.995664230495361, 0.995664230495361, 0.995664230495361, 0.995664230495361, 0.995664230495361, 0.995664230495361, 0.995664230495361, 0.995664230495361, 0.995664230495361, 0.995664230495361, 0.995664230495361, 0.995664230495361, 0.995664230495361, 0.995664230495361, 0.995664230495361, 0.994583228636722, 0.994583228636722, 0.994583228636722, 0.994583228636722, 0.994583228636722, 0.994583228636722, 0.994583228636722, 0.99350340043119, 0.99350340043119, 0.99350340043119, 0.99350340043119, 0.99350340043119, 0.99350340043119, 0.99350340043119, 0.99350340043119, 0.99350340043119, 0.99350340043119, 0.992424744601474, 0.992424744601474), dim = c(46L, 4L), dimnames = list( NULL, c("", "", "step", "Prob"))), class = "haploNet")
sites对象结构
structure(list(sample = c("D20B3", "D20B7", "D8B6", "D20B1", "D8B3", "D8B8", "D8B7", "D20B8", "D8B67", "D20B40", "D8B2", "D8B1", "D8B9"), site = c("D20B3", "D20B7", "D8B6", "D20B1", "D8B3", "D8B8", "D8B7", "D20B8", "D8B67", "D20B40", "D8B2", "D8B1", "D8B9" ), haplotype = c("D20B3", "D20B7", "D8B6", "D20B1", "D8B3", "D8B8", "D8B7", "D20B8", "D8B67", "D20B40", "D8B2", "D8B1", "D8B9")), class = "data.frame", row.names = c(NA, -13L))
ft生成方式
ft <- table(sites[3:2]) > ft site haplotype D20B1 D20B3 D20B40 D20B7 D20B8 D8B1 D8B2 D8B3 D8B6 D8B67 D8B7 D8B8 D8B9 D20B1 1 0 0 0 0 0 0 0 0 0 0 0 0 D20B3 0 1 0 0 0 0 0 0 0 0 0 0 0 D20B40 0 0 1 0 0 0 0 0 0 0 0 0 0 D20B7 0 0 0 1 0 0 0 0 0 0 0 0 0 D20B8 0 0 0 0 1 0 0 0 0 0 0 0 0 D8B1 0 0 0 0 0 1 0 0 0 0 0 0 0 D8B2 0 0 0 0 0 0 1 0 0 0 0 0 0 D8B3 0 0 0 0 0 0 0 1 0 0 0 0 0 D8B6 0 0 0 0 0 0 0 0 1 0 0 0 0 D8B67 0 0 0 0 0 0 0 0 0 1 0 0 0 D8B7 0 0 0 0 0 0 0 0 0 0 1 0 0 D8B8 0 0 0 0 0 0 0 0 0 0 0 1 0 D8B9 0 0 0 0 0 0 0 0 0 0 0 0 1
解决步骤
- 替换net对象的标签:直接修改
net的labels属性,将默认的罗马数字标签替换为sites中的样本名称。因为每个单倍型对应唯一样本,顺序一一匹配,直接赋值即可。
# 将net的labels替换为sites的sample列 attr(net, "labels") <- sites$sample
- 调整绘图代码:由于标签已经是样本名称,无需再绘制图例,可删除图例相关代码;同时因为每个单倍型只对应一个样本,
pie参数可以去掉(保留也不影响,但没必要)。
修改后的完整绘图代码
# 先替换标签 attr(net, "labels") <- sites$sample # 绘制单倍型网络 plot(net, size=attr(net, "freq"), scale.ratio = 1, cex = 1, labels=T, font=3, fast=T, threshold=0, show.mutation = 3, legend=F) # 无需再绘制图例,删除原图例代码
说明
- 替换标签后,绘图时圆圈的标签会直接显示样本名称,无需额外图例即可识别每个节点对应的样本。
- 若需要调整标签大小,可修改
cex参数;圆圈大小通过size参数控制,可根据需求自行调整。
内容的提问来源于stack exchange,提问作者Glubbdrubb
相关产品推荐
相关产品推荐

