2012-11-21 24 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