我的基因具有以下形式的相应p值:
Gene p-value
gene1 0.01
gene2 0.02
gene3 0.06
gene4 0.05
gene5 0.09
gene6 0.01
gene7 0.05
gene8 0.09
gene9 0.01
gene10 0.06
我想创建一个框图,如下例所示:
而不是几个月,我希望这是基因的数量(基因的频率)。根据我所拥有的庞大数据集,x轴应该是属于特定p值类别(在y轴上)的基因数量。因此,y轴将是p值,从0.01到1。
我用过
boxplot(gene ~ p-value, col=rainbow(12))
但它不起作用。
答案 0 :(得分:1)
我在这里使用了cut
和aggregate
这两个函数。您可以在R控制台中运行?cut
和?aggregate
来了解有关它们的更多信息。我们的想法是将您的数据框架中的基因和p值以及cut
p值放入箱中。如果您想要更多或更少的垃圾箱,可以更改breaks
功能中的cut
参数。然后,您可以使用boxplot
绘制其bin的p值分布。
我将xaxt=FALSE
参数添加到boxplot
,这样我们就可以定义自己的自定义轴 - 在这种情况下,是每个bin中的基因数量。我使用aggregate
函数和length
计算了基因数,然后添加了轴。
set.seed(1)
example <- data.frame(gene=sample(paste("gene",1:10),size=500,replace=TRUE),pval=sample(seq(0.01,1,0.01),500,replace=TRUE))
example$bin <- cut(example$pval,breaks=10)
boxplot(example$pval~example$bin,xaxt="n",ylab="p value",xlab="number of genes")
ngenes <- aggregate(example$gene,by=list("bin"=example$bin),length)
axis(side=1,labels=ngenes$x,at=1:10)