当使用haploNet软件包在单倍型网络上制作一些图时, 我使用互联网上提供的脚本来做到这一点。不过我觉得有些不对劲。该脚本以woodmouse示例的形式提供。我使用的代码是:
x <- read.dna(file="Masto.fasta",format="fasta")
h <- haplotype(x)
net <- haploNet(h)
plot(net)
plot(net, size = attr(net, "freq"), fast = TRUE)
plot(net, size = attr(net, "freq"))
plot(net, size=attr(net, "freq"), scale.ratio = 2, cex = 0.8
table(rownames(x))
ind.hap<-with(
stack(setNames(attr(h, "index"), rownames(h))),
table(hap=ind, pop=rownames(x)[values])
)
ind.hap
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)
legend(x=7,y=10,c("Baeti ero","Felege weyni","Golgole naele","Hagare selam","Ruba feleg","Ziway"),c("red","yellow","green","turquoise","blue","magenta"))
但是在绘制ind.hap时,您会注意到某些行不在正确的位置。你可以在这里看到:
pop
hap Baetiero ETH022 ETH742 Felegeweyni Golgolenaele Rubafeleg
I 0 0 1 0 0 0
II 0 1 0 0 0 0
III 1 0 0 1 0 1
IV 2 0 0 0 0 3
IX 0 0 0 1 0 0
V 4 0 0 0 2 0
VI 4 0 0 1 0 4
VII 2 0 0 1 0 0
VIII 0 0 0 1 0 1
X 3 0 0 0 1 0
XI 0 0 0 0 1 1
XII 0 0 0 1 0 0
XIII 0 0 0 0 0 1
您可以看到第IX行不在正确的位置。这不会是一个太大的问题,但程序需要第9行来制作IX的饼图,这是VIII的数据。这是结果: (我无法插入图像,因为我的声誉低于10 ...,无论如何你通过执行整个文件得到图像)
你可以看到,对于V直到IX,它不应该是(它们是交换的行)。例如:IX中只有1个单倍型,但是有2个单倍型的饼图(两者都有50%的图表),这是使用VIII数据生成的。由于行按字母顺序排序而不是按升序排序,但这是包装固有的,我不知道该怎么做。 我远离R中的主人,所以尽量不要过于抽象,而是提供代码。
如果有人非常了解这个包装,请解释为什么真正的图表背后有这些奇怪的额外线条(这些带有数字),因为它们在woodmouse示例中不可见(可能是&# 39; s因为什么也错了?)
提前完成
答案 0 :(得分:4)
我一直在努力解决同样的问题,但我相信我想出了一个解决方案。
问题在于,每个“群体”的单倍型计数table
的步骤按字母顺序排列单倍型。因此,例如,单倍型“IX”出现在“V”之前。另一方面,函数haplotype()
按其“数字”顺序对单倍型进行排序。这就是在绘图时产生差异的原因。
这可以通过“标签”对单倍型对象进行排序来解决,如?haplotype
帮助中所述。
我将使用woodmouse
示例数据来举例说明:
# Sample 9 distinct haplotypes
library(pegas)
data(woodmouse)
x <- woodmouse[sample(9, 100, replace = T), ]
为了简化,我创建了一个函数来创建单倍型的计数表(基于this post):
countHap <- function(hap = h, dna = x){
with(
stack(setNames(attr(hap, "index"), rownames(hap))),
table(hap = ind, pop = attr(dna, "dimnames")[[1]][values])
)
}
现在,让我们看一下没有排序单倍型的结果:
h <- haplotype(x) # create haplotype object
net <- haploNet(h) # create haploNet object
plot(net, pie = countHap(), size = attr(net, "freq"), legend = T)
现在,让我们看看我们的计数表,检查这些结果:
countHap(h, x)
pop
hap No0906S No0908S No0909S No0910S No0912S No0913S No304 No305 No306
I 0 0 0 0 0 0 0 8 0
II 0 0 0 0 0 0 9 0 0
III 0 0 0 0 0 0 0 0 10
IV 16 0 0 0 0 0 0 0 0
IX 0 0 0 0 0 8 0 0 0
V 0 12 0 0 0 0 0 0 0
VI 0 0 10 0 0 0 0 0 0
VII 0 0 0 13 0 0 0 0 0
VIII 0 0 0 0 14 0 0 0 0
事情不匹配:例如,单倍型“V”应出现在单个“No0908S”中,而是着色为单个“No0913S”(应该是单倍型“IX”的标签)。
现在,让我们对单倍型进行排序:
h <- haplotype(x)
h <- sort(h, what = "labels") # This is the extra step!!
net <- haploNet(h)
plot(net, pie = countHap(), size = attr(net, "freq"), legend = T)
现在一切都很好!
额外:
虽然OP没有要求,但我想把它留在这里,如果其他人感兴趣的话。 有时,我觉得按频率标记单倍型很方便。这可以通过将单倍型标签改变为等于它们的频率来完成:
attr(h, "labels") <- attr(h, "freq")
plot(net, pie = countHap(), size = attr(net, "freq"), legend = T)