web-dev-qa-db-ja.com

Rでggplot2を使用して2つのグラフをオーバーレイする

2つのグラフがあり、一方を他方の上に重ねようとしています。

データフレーム「ge」の例は次のようになります。実際には、それぞれ200サンプルの10個の遺伝子があるため、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個の遺伝子があるため、マトリックスは4列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)

2番目のグラフは、すべての遺伝子にわたる各サンプルの線の形で遺伝子発現をグラフ化します。

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

linegraphsの上にavggraphを重ねたいと思います。これを行う方法はありますか? avggraph + linegraphsを試しましたが、エラーが発生しています。これは、グラフが2つの異なるデータフレームによって生成されるためだと思います。

また、両方のグラフの軸が同じであることを指摘する必要があります。両方のグラフのX軸に遺伝子があり、Y軸に遺伝子発現があります。

どんな助けも大歓迎です!

24
Sheila

1つの方法は、geom_line最初のプロットに対する2番目のプロットのコマンド。このgeomは異なるデータセットに基づいていることを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コマンドは、生データに基づいて行を作成するためのものです。 enter image description here

23
Sven Hohenstein

私が見つけた回避策は、2つのプロットをマージする代わりに、データをマージすることでした。 2つのデータフレームの最後に追加の列を追加し、それらに対してrbind操作を実行しました。fillまたはcolorの美学を使用して2つのプロットを分離しました。もちろん、私の場合、軸に使用されるスケールは同じでした。

2
ants.in.my.eyes