gpt4 book ai didi

R- 如何在 haploNet haplotyp Networks {pegas} {ape} {adegenet} 中绘制正确的饼图

转载 作者:行者123 更新时间:2023-12-04 00:23:32 25 4
gpt4 key购买 nike

当使用 haploNet 包在单倍型网络上绘制一些图时,我使用了 Internet 上可用的脚本来执行此操作。但是我认为有些不对劲。该脚本以 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 示例中不可见(也许是因为还有什么问题吗?)

提前致谢

最佳答案

我一直在为同样的问题而苦苦挣扎,但相信我想出了一个解决方案。

问题是制作每个“群体”单倍型计数的步骤按字母顺序排列单倍型。因此,例如,单倍型“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)

enter image description here

现在,让我们看看我们的计数表,检查这些结果:

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)

enter image description here

现在一切都很好!

额外:

虽然这不是 OP 要求的,但如果其他人对此感兴趣,我想把它留在这里。有时,我发现按频率标记单倍型很方便。这可以通过将单倍型标签更改为等于它们的频率来完成:

attr(h, "labels") <- attr(h, "freq")
plot(net, pie = countHap(), size = attr(net, "freq"), legend = T)

enter image description here

关于R- 如何在 haploNet haplotyp Networks {pegas} {ape} {adegenet} 中绘制正确的饼图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31220586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com