【问题标题】:Complex Superimposed Horizontal R Barplots with Multiple Values on each Bar每个条形上具有多个值的复杂叠加水平 R 条形图
【发布时间】:2014-06-01 22:52:17
【问题描述】:

几个月来我一直在尝试弄清楚如何做到这一点,所以希望有人能给我一些澄清。我创建了一个 R 脚本,它显示了我的数据库基因表中的所有值。所以它给出了每个基因的长度(以核苷酸为单位),我将其水平放置。

主要思想是从另一个名为 QGRS 的表中获取值,其中包含每个 QGRS 的长度。我遇到的问题是一个基因上有很多 QGRS,所以我不知道如何使用 R 来显示这一点。可能有更好的方法,但我的想法是让水平基因长度条为一种颜色,并让 QGRS 长度以不同颜色显示在这些条上,以突出 QGRS 在基因上的位置。这适用于所有基因。我不明白如何在单个条上获取多个值,然后如何正确叠加两个图表。

我希望这是有道理的。这是我所拥有的:

        ############## Setup for Chromosome Lengths ############## 
quartz()    #for mac
genes<-read.delim("genes_plot.out", header=FALSE)
sortmat<-genes[order(genes$V2),]

#qgrs<-read.delim("qgrs_plot.out", header=FALSE)

    ############## Generate Horizontal Genes Plot ############## 
par(bg = "darkseagreen1")
png("genes_plot.png", height=1500, width=1000)  
barplot( sortmat[,3], names.arg=sortmat[,1], col="red",      #genes
    horiz=TRUE,
    las='1',
    main="Human QGRS by Genes",
    ylab="",
    space=30,
    xlab="Length of Gene [# of nucleotides]",   )
mtext("Gene ID [RefSeq]", side=0, line=2)

    ############## Include QGRS over Genes Plot ############## 
#par(new=TRUE)  #to superimpose the two barplots
#barplot( qgrs[,1] )    #qgrs

        ############## End ############## 
dev.off()

这是它输出的内容[长图!]:

** 注意,左边的数字被剪掉了一点,我不知道为什么……但它们是直接来自 NCBI 的基因 ID,只是标记它们的参考。


如果需要更多信息,请告诉我。请,任何帮助我将不胜感激。我真的试图寻找答案几个月(整个上个学期),但我认为我在这方面不是很胜任。这对我来说太复杂了。

现在我知道我可以为 QGRS 制作另一个图表,但如果采用相同的方式,它们会分别出现在不同的线上!所以这没有帮助。

另外,我的基因表是这样工作的。对于人类基因组中的所有染色体,我每个染色体有 5 个基因(如果分别计算 X 和 Y,则为 24 个)。因此,如果需要,基因图也可以合并为只有 24 行,每行由 5 个基因组成,但我怀疑这是否有帮助。

--------编辑------------

这是来自基因表的样本数据,1 号和 2 号染色体的 5 个基因:

GeneID   Chromosome   Length [nucleotides]
8682    1   10037
10623   1   18364
441878  1   858
645382  1   2986
650901  1   917
841         2   54268
28949   2   38
80303   2   76724
729992  2   1072
100873329   2   106

这是来自 QGRS 表的示例数据 [Gene '8682' 的几行 [上述示例数据中的第一行]

   Start    End    Chromosome
    389     391     1
    524     526     1
    739     741     1
    834     836     1
    904     906     1

【问题讨论】:

  • 为了更轻松地为您提供帮助,粘贴示例数据也会很有帮助,以便我们运行您的代码并将您的问题发送到reproducible。它不必是真实数据,也不必很长,但与您的输入类似的东西会很有用。

标签: r graph bar-chart genome


【解决方案1】:

好的,我不得不稍微调整一下测试数据。与长度比例相比,您的 QGRS 值的范围非常小,它们基本上没有绘制。在大多数情况下,它们的宽度不到一个像素。所以我加强了他们。我还添加了一个 GeneID 列,以便我可以匹配它们

#sample data
genes<-data.frame(
    GeneID = c(8682, 10623, 441878, 645382, 650901, 
        841, 28949, 80303, 729992, 100873329), 
    Chromosome = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2),
    Length = c(10037, 18364, 858, 2986, 917, 54268, 
        38, 76724, 1072, 106)
)

qgrs<-data.frame(
    Start = c(500, 7500, 2200, 25000, 61000), 
    End = c(1100, 8200, 3400, 30000, 64000), 
    Chromosome = c(1L, 1L, 2L, 2L, 2L),
    GeneID=c(8682, 8682, 80303, 80303, 80303)
)

所以我想明确设置一个宽度,并且我还捕获了barplot 的输出,所以我知道每个值都被绘制了。

ww<-20
bb<-barplot( genes[,3], names.arg= genes[,1], 
    col="red", horiz=TRUE,
    las='1', main="Human QGRS by Genes",
    ylab="", xlab="Length of Gene [# of nucleotides]",
    space=.5,
    width=ww
)

现在我在结果图上查找每个基因的位置,然后我使用rect 在现有图上的正确位置绘制矩形

idx < -match(qgrs$GeneID, genes$GeneID)
with(qgrs, rect(Start,bb[idx]-ww/2,End, bb[idx]+ww/2, col="green"))

这会产生以下情节。

现在,如果您的区域那么小,您可能需要在rect 上设置border=NA。默认情况下,R 会在形状周围画一个黑色边框,如果形状太小,基本上边框只是覆盖了颜色,看起来只是黑色。您还可以将边框设置为矩形的颜色,以增加它们的宽度。

【讨论】:

  • 这非常聪明!非常感谢!我现在必须对其进行调整,以便它可以从文件中获取数据(因为有这么多!)。我不应该这么惊讶,但老实说,我很高兴你能帮助我!这是一种非常简单而聪明的方法,我很喜欢。
猜你喜欢
  • 1970-01-01
  • 2013-06-02
  • 1970-01-01
  • 2012-03-14
  • 2015-01-13
  • 1970-01-01
  • 2012-05-11
  • 1970-01-01
  • 2021-09-28
相关资源
最近更新 更多