我几个月来一直试图弄清楚如何做到这一点,所以希望有人可以给我一些清晰度。我创建了一个R脚本,显示数据库的Genes表中的所有值。因此它给出了每个基因的长度(以核苷酸计),并且我将其水平放置。
主要思想是从另一个名为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制作另一张图,但如果它是这样的话,它们会分别出现在不同的线上!所以这没有帮助。
另外,我的Genes表就是这样的。对于人类基因组中的所有染色体,每个染色体有5个基因(如果分别计算X和Y,则为24个)。因此,如果需要,基因图也可以组合成只有24行,每行由5个基因组成,但我怀疑这有帮助。
-------- EDIT ------------
这是来自Genes表的样本数据,染色体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
答案 0 :(得分: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=NA
上设置rect
。默认情况下,R会在形状周围绘制一个黑色边框,如果形状太小,基本上边框只会覆盖颜色而它看起来只是黑色。您还可以将边框设置为矩形的颜色,以使它们更宽一些。