簡體   English   中英

在R中使用ggplot2覆蓋兩個圖形

[英]Overlaying two graphs using ggplot2 in 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

數據幀“ avg”的示例如下所示。 這是所有樣本中每個基因的數據點的平均值。 實際上,此圖有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 有沒有辦法做到這一點? 我試過avggraph + linegraphs,但出現錯誤。 我認為這是因為圖形是由兩個不同的數據幀生成的。

我還要指出,兩個圖形的軸是相同的。 這兩個圖在X軸上都有基因,在Y軸上有基因表達。

任何幫助將不勝感激!

一種方法是將第二個圖的geom_line命令添加到第一個圖。 您需要告訴ggplot這個ggplot區域基於不同的數據集:

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命令用於基於原始數據創建線。 在此處輸入圖片說明

我發現的解決方法是,我沒有合並兩個圖,而是合並了數據。 我在兩個數據框的末尾添加了另一列,然后對它們執行rbind操作。使用fillcolor美學將兩個圖分開。 當然,在我的情況下,用於軸的比例應相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM