在R中使用ggplot2覆盖两个图

时间:2012-11-21 06:32:14

标签: r graph ggplot2

我有两张图,我试图将一张图叠加在另一张图上:

数据框“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)

第二张图表显示了所有基因中每个样本的基因表达形式。<​​/ p>

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

我想在 linegraphs 之上叠加 avggraph 。有没有办法做到这一点?我试过avggraph + linegraphs但是我收到了一个错误。我认为这是因为图表是由两个不同的数据帧生成的。

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

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:23)

一种方法是将第二个绘图的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

答案 1 :(得分:2)

我发现的解决方法是,我合并数据而不是合并两个图。我在两个数据框的末尾添加了另一列,然后对它们执行了conda create -n virtual_env_name python=3.7 操作。使用了rbindfill美学来分离这两个图。当然,在我的情况下,用于轴的比例应相同。