0

几个月来我一直在尝试弄清楚如何做到这一点,所以希望有人能给我一些澄清。我创建了一个 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
4

1 回答 1

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"))

这导致以下情节。

结果图

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

于 2014-06-02T03:36:59.680 回答