ggplot将aes变量平滑传递给method.args

时间:2017-05-11 13:14:43

标签: r ggplot2

经过多次谷歌搜索后,我决定向你寻求帮助。

我正在不同的时间点绘制一些观察结果,我想添加一个stat_smooth的线性回归。但是,我希望线性模型的截距为100(因为数据是相对于时间0的百分比)。为此,我发现最简单的方法是在lm中使用offset参数。问题是如何获得' y'每组观察(col和facet组)将其传递给offset参数。

如果我使用每组具有相同观察次数的数据(在我的情况下为10),我可以只写出数字并且效果很好:

myplot <- ggplot(mydt2, aes(x=Time_point, y=GFP_rel, col=Gene, fill=Gene,group=Gene))
myplot <- myplot + stat_smooth(method='lm', formula = y ~ x + 0, method.args=list(offset=rep(100,10))) + 
  facet_wrap(~Cell_line)

enter image description here

然而,这不是非常优雅和/或灵活。我的问题是:如何将观察次数传递给method.args?我尝试了offset(100,.. count ..),但是我得到了错误:( list)对象无法强制键入&#39;整数&#39;)。

有什么建议吗?

由于

1 个答案:

答案 0 :(得分:0)

您可以使用公式中的I(y - 100)编码,如here所示,而不是使用偏移量。

然而,stat_smooth的预测值将是y - 100的预测值,而不是y的预测值。此行将通过0.您可以使用y将行移回位置以显示原始position_nudge变量的预测。

所以stat_smooth代码看起来像

stat_smooth(method = "lm", formula = I(y - 100) ~ x + 0, 
            position = position_nudge(y = 100))