Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 每个条形上有多个值的复杂叠加水平条形图_R_Graph_Bar Chart_Genome - Fatal编程技术网

R 每个条形上有多个值的复杂叠加水平条形图

R 每个条形上有多个值的复杂叠加水平条形图,r,graph,bar-chart,genome,R,Graph,Bar Chart,Genome,几个月来我一直在想如何做到这一点,所以希望有人能给我一些明确的答案。我创建了一个R脚本,它显示了数据库Genes表中的所有值。所以它给出了每个基因的长度(以核苷酸为单位),我将其水平排列 其主要思想是从另一个名为QGRS的表中获取值,该表包含每个QGRS的长度。我面临的问题是,在一个基因上有许多QGR,所以我不知道如何使用R来显示这一点。也许有更好的方法,但我的想法是让水平的基因长度条是一种颜色,让QGRS长度以不同的颜色显示在这些条的正上方,以突出QGRS在基因上的位置。这是所有的基因。我不知

几个月来我一直在想如何做到这一点,所以希望有人能给我一些明确的答案。我创建了一个R脚本,它显示了数据库Genes表中的所有值。所以它给出了每个基因的长度(以核苷酸为单位),我将其水平排列

其主要思想是从另一个名为QGRS的表中获取值,该表包含每个QGRS的长度。我面临的问题是,在一个基因上有许多QGR,所以我不知道如何使用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()
这是QGRS表中的样本数据[基因'8682'的几行[上面样本数据的第一行]

   Start    End    Chromosome
    389     391     1
    524     526     1
    739     741     1
    834     836     1
    904     906     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)
)
现在我在结果图上查找每个基因的位置,然后使用
rect
在现有图的正确位置绘制矩形

idx < -match(qgrs$GeneID, genes$GeneID)
with(qgrs, rect(Start,bb[idx]-ww/2,End, bb[idx]+ww/2, col="green"))
idx<-match(qgrs$GeneID,genes$GeneID)
使用(qgrs,rect(开始,bb[idx]-ww/2,结束,bb[idx]+ww/2,col=“绿色”))
这将导致下面的图


现在,如果您的区域非常小,您可能需要在
矩形上设置
border=NA
。默认情况下,R将在形状周围绘制黑色边框,如果形状太小,则基本上边框只绘制在颜色上,看起来只是黑色。您还可以将边框设置为矩形的颜色,以使其更黑一些宽度。

在oredr中,为了更方便地帮助您,粘贴示例数据也会很有帮助,以便我们运行您的代码和解决您的问题。它不必是真实的数据,也不必很长,但类似于您输入的内容将是有益的。这非常聪明!非常感谢!我现在必须调整它,以便至少它可以从文件中获取数据(因为文件太多了!)。我不应该感到惊讶,但老实说,我很高兴你能帮助我!!这是一个非常简单和聪明的方法,我喜欢。
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
)
idx < -match(qgrs$GeneID, genes$GeneID)
with(qgrs, rect(Start,bb[idx]-ww/2,End, bb[idx]+ww/2, col="green"))