如何在haploNet Haplotype Networks {pegas}中绘制饼图

Gui*_*ias 3 r genetics dna-sequence phylogeny ape-phylo

我正在尝试使用{pegas}的haploNet功能来绘制单倍型网络,但是我在同一个饼图中将来自不同群体的相同单倍型变得困难.我可以用以下脚本构建单倍型网:

x <- read.dna(file="x.fas",format="fasta")
h <- haplotype(x)
net <- haploNet(h)
plot(net)
Run Code Online (Sandbox Code Playgroud)

我想在dnabin数据中设置每个分类群的原始种群的标签,因此我可以在得到的网络中得到不同颜色的饼图(来自不同种群的单倍型).我还想删除生成的单倍型网络中的重叠圆圈.

谢谢你的帮助!

一个例子:

> data(woodmouse)
> x <- woodmouse[sample(15, size = 110, replace = TRUE), ]
> h <- haplotype(x)
> net <- haploNet(h)
> plot(net, size=attr(net, "freq"), scale.ratio = 2, cex = 0.8)
Run Code Online (Sandbox Code Playgroud)

该脚本用于使用{pegas}构建单倍型网络.较大的圆圈代表某种类型的更多单倍型.我想知道如何在dnabin矩阵中设置单倍型的起源,因此它们会在网络中以不同的颜色出现.

MrF*_*ick 5

好的,试着从你的例子中理解.您所拥有的种群似乎是15个种群,每个种群有3-13个样本.

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
Run Code Online (Sandbox Code Playgroud)

当你跑步时haplotype(x),你会得到(不出所料)15个单倍型,代表从种群到单倍型的1:1映射.我们可以创建一个表格,显示种群和单倍型之间的关系

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
Run Code Online (Sandbox Code Playgroud)

我们可以在绘图期间使用此表在每个节点上绘制pic字符.

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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

为了更好地展示饼图,我们可以为每个样本分配不正确的种群

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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在这里你可以看到我们在每个单倍型中有更多的多样性,因为我们错误地用人工名称标记了种群,因此它们不会很好地聚集.

  • @MrFlick请注意,此代码有错误.在第一个图中注意单倍型"VIII"应该出现在样本"No1114S"中,但这不是它在图中的颜色.我已经回答了这个问题[这里](http://stackoverflow.com/questions/31220586/r-how-to-plot-correct-pie-charts-in-haplonet-haplotyp-networks-pegas-ape-a/33107267#33107267).简而言之,您需要在继续之前通过标签`h < - sort(h,what ="label")`对单倍型对象进行排序. (2认同)