【问题标题】:How to plot Pie charts in haploNet Haplotype Networks {pegas}如何在 haploNet Haplotype Networks {pegas} 中绘制饼图
【发布时间】:2014-11-03 13:00:51
【问题描述】:

我正在尝试使用 {pegas} 的 haploNet 函数来绘制单倍型网络,但我无法将来自不同群体的相同单倍型放在同一个饼图中。我可以使用以下脚本构建单倍型网络:

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

我想在 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)

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

【问题讨论】:

  • dnabin matrix 是什么?您的样本中有哪些人群?同样,尽可能具体地说明所需的输出应该是什么。您确定这些函数会计算您希望绘制的值吗?尝试向不熟悉该软件包的人解释该数据(因为pegas 在这里似乎不是很常见),因为通常用户可以修改绘图功能以创建您想要的任何内容,只要您非常具体关于你想要什么以及数据来自哪里。我仍然认为这个问题缺乏足够的细节来回答。
  • Pegas 是一个用于种群和进化遗传学分析系统的 R 包。dnabin 是一个矩阵或 DNA 序列列表,文件中读取的分类群名称分别为行名或名称。通过默认情况下,序列以二进制格式存储。这个 dnabin 文件是使用 {pegas} 包中的函数 read.dna 构建的。当我有一个 DNA 数据集时,我有来自不同群体的个体的序列(例如,来自 5 个群体的 100 个个体,每个群体 20 个个体)。我想知道如何标记 dnabin 矩阵中的每个人,以说明它来自哪个人群。

标签: r dna-sequence phylogeny genetics ape-phylo


【解决方案1】:

好的,试着从你的例子中理解。看来您拥有的人口是 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

当您运行 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

我们可以在绘图期间使用此表在每个节点处绘制图片字符。

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)

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

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)

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

【讨论】:

  • 太棒了!非常感谢!我还有一个问题:你知道如何用相同的颜色绘制不同的个体吗?(例如,如果你想将 No0906S No0908S No0909S No0910S 视为相同的群体,保持他们的名字但在网络上以相同的颜色绘制它们)我刚刚开始学习 R 是如何工作的,您的帮助非常有用!非常感谢。
  • 据我所知,这不会很直接。这肯定超出了评论的范围。如果您愿意,可以发布一个新问题,以便其他人回答。
  • @MrFlick 请注意此代码存在错误。请注意,在您的第一个情节单倍型“VIII”应该出现在样本“No1114S”中,但这不是它在情节中的着色方式。我已经回答了这个问题here。简而言之,在继续之前,您需要按标签h &lt;- sort(h, what = "label") 对单倍型对象进行排序。
  • 有没有办法改变饼图的颜色? col 影响图例的颜色,但不影响绘图中饼图的颜色。
猜你喜欢
  • 2015-09-22
  • 2019-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多