26

我有两个图表,我试图将一个覆盖在另一个之上:

数据框“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 叠加linegraphs之上。有没有办法做到这一点?我已经尝试过 avggraph + linegraphs 但我遇到了一个错误。我认为这是因为这些图表是由两个不同的数据框生成的。

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

任何帮助将不胜感激!

4

2 回答 2

27

一种方法是将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命令用于根据原始数据创建行。 在此处输入图像描述

于 2012-11-21T07:07:59.007 回答
2

我发现的解决方法是,我没有合并两个图,而是合并了数据。我在两个数据框的末尾添加了一个附加列,然后对它们执行了rbind操作。使用fillorcolor美学来分隔两个图。当然,在我的情况下,用于轴的比例是相同的。

于 2018-07-02T18:45:56.063 回答