2012-11-21 22 views
21

使用GGPLOT2图我有两个图表和我试图覆盖一个在另一个的顶部:叠置两个中的R

数据帧“GE”看起来像这样的一个例子。实际上有10个基因与每个200个样品,所以有2000行和3列:

Exp Gene Sample 
903.0 1  1 
1060.0 1  2 
786.0 1  3 
736.0 1  4 
649.0 2  1 
657.0 2  2 
733.5 2  3 
774.0 2  4 

数据帧“平均”看起来像这样的一个例子。这是所有样本中每个基因数据点的平均值。实际上这个曲线图具有10个基因,因此,基质是4col X 10行:

mean  Gene sd   se 
684.2034 1 102.7142 7.191435 
723.2892 2 100.6102 7.044122 

第一图形图表的线的平均表达为每个基因与每个数据点的标准偏差一起。

avggraph <- ggplot(avg, aes(x=Gene, y=mean)) + geom_point() +geom_line() + geom_errorbar(aes(ymin=mean-sd, ymax=mean+sd), width=.1) 

第二个图形表示所有基因中每个样本的线形式的基因表达。

linegraphs <- ggplot(ge, aes(x=Gene, y=Expression, group=Samples, colour="#000099")) + geom_line() + scale_x_discrete(limits=flevels.tge) 

我想塞给avggraph上的linegraphs顶部。有没有办法做到这一点?我试过avggraph + linegraphs,但是我收到一个错误。我认为这是因为这些图是由两个不同的数据框产生的。

我还应该指出,两个图的轴是相同的。两张图都在X轴上有基因,在Y轴上有基因表达。

任何帮助将不胜感激!

回答

21

一种方法是将第二个图的geom_line命令添加到第一个图。你需要告诉ggplot,这GEOM是基于不同的数据集:

ggplot(avg, aes(x=Gene, y=mean)) + 
    geom_point() + 
    geom_line() + 
    geom_errorbar(aes(ymin=mean-sd, ymax=mean+sd), width=.1) + 
    geom_line(data = ge, aes(x=Gene, y=Exp, group=Sample, colour="#000099"), 
      show_guide = FALSE) 

最后geom_line命令是一个用于创建基于原始数据线。 enter image description here

+0

谢谢@Sven。这工作,但是当我这样做平均线(黑色)是在粉红色的线后面。而且由于我的数据中有太多粉红线,所以你看不到黑色的那一行。有关如何翻转它的任何建议? – Sheila

+1

@ShilaP只需更改geom的顺序:'ggplot()+ geom_line(data = ge,aes(x = Gene,y = Exp,group = Sample,color =“#000099”),show_guide = FALSE)+ (数据= avg,aes(x =基因,y =平均值))+ geom_errorbar(data = avg,aes(x = Gene,ymin = mean-sd,ymax = mean + sd),width = .1) + geom_point(data = avg,aes(x = Gene,y = mean))' –

+0

Got it!是的,我认为它需要以某种方式翻转geom_line()的代码,但不能完全弄清楚。谢谢你的帮助! – Sheila