How to plot Pie charts in haploNet Haplotype Networks {pegas}

怎甘沉沦 提交于 2019-11-28 09:32:26

Ok, trying to make sense from your example. It appears the populations you have are 15 populations with anywhere from 3-13 samples per population.

table(rownames(x))

# No0906S No0908S No0909S No0910S No0912S No0913S No1007S 
#      10       8       6       3       3       7       6 
# No1103S No1114S No1202S No1206S No1208S   No304   No305 
#       4      13       9       6       9      13       7 
#   No306 
#       6

When you run haplotype(x), you get (unsurprisingly) 15 haplotypes representing a 1:1 mapping from population to haplotype. We can create a table showing the relationship between the populations and haplotypes with

ind.hap<-with(
    stack(setNames(attr(h, "index"), rownames(h))), 
    table(hap=ind, pop=rownames(x)[values])
)
ind.hap[1:10, 1:9]  #print just a chunk

#       pop
# hap    No0906S No0908S No0909S No0910S No0912S No0913S No1007S No1103S No1114S
#   I          0       0       0       0       0       0       0       0       0
#   II         0       0       0       0       0       0       6       0       0
#   III        0       0       0       0       0       0       0       4       0
#   IV        10       0       0       0       0       0       0       0       0
#   IX         0       0       0       0       0       0       0       0       0
#   V          0       0       6       0       0       0       0       0       0
#   VI         0       0       0       0       0       0       0       0       0
#   VII        0       0       0       0       0       7       0       0       0
#   VIII       0       0       0       0       0       0       0       0      13
#   X          0       0       0       0       0       0       0       0       0

We can use this table during plotting to draw pic chars at each of the nodes.

plot(net, size=attr(net, "freq"), scale.ratio = 2, cex = 0.8, pie=ind.hap)
legend(50,50, colnames(ind.hap), col=rainbow(ncol(ind.hap)), pch=20)

To better show off the pie charts, we can assign incorrect populations to each of the samples

wrong.pop<-rep(letters[1:5], each=22)
ind.hap2<-with(
    stack(setNames(attr(h, "index"), rownames(h))), 
    table(hap=ind, pop=wrong.pop[values])
)

plot(net, size=attr(net, "freq"), scale.ratio = 2, cex = 0.8, pie=ind.hap2)
legend(50,50, colnames(ind.hap2), col=rainbow(ncol(ind.hap2)), pch=20)

Here you can see we have more diversity at each haplotype because we've incorrectly labeled the populations with artificial names so they don't clump as nicely.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!