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.