【问题标题】:R- How to plot correct pie charts in haploNet haplotyp Networks {pegas} {ape} {adegenet}R- 如何在 haploNet haplotyp Networks {pegas} {ape} {adegenet} 中绘制正确的饼图
【发布时间】:2015-09-22 02:36:36
【问题描述】:

当使用 haploNet 包在单倍型网络上绘制一些图时, 我使用互联网上可用的脚本来执行此操作。不过我觉得有问题。该脚本以木鼠示例的形式提供。我使用的代码是:

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 的高手,所以尽量不要太抽象,而是提供代码。

如果有人非常了解这个包,请解释为什么在真实图表后面有这些奇怪的额外线条(这些带有数字),因为它们在木鼠示例中不可见(可能是因为还有什么问题?)

提前感谢

【问题讨论】:

    标签: r dna-sequence phylogeny genetics


    【解决方案1】:

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

    问题在于,制作单倍型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)
    

    【讨论】:

    • 嗨,有没有办法改变饼图的颜色? plot 函数中有一个 col 参数,但这对我不起作用。
    • @JavierM88 您可以使用选项bg。使用?plot.haploNet查看函数的帮助
    猜你喜欢
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 2022-08-13
    相关资源
    最近更新 更多