当我的aes函数中未提及XXX时,geom_text返回“找不到对象XXX”错误

时间:2018-08-30 22:57:44

标签: r ggplot2

运行下面的代码时,出现错误Error in FUN(X[[i]], ...) : object 'typoft' not found。我有两个geom_texts,因为我在图的上方放置了更多文本。谁能在这里帮助我,让我知道为什么会有一个

1 个答案:

答案 0 :(得分:2)

您的问题出在以下事实上:在aes调用中定义ggplot()时,这些设置会被其后的所有geom_*继承,如果它们未被覆盖。

如果我们将您的问题简化为最小形式,我们可以清楚地看到这一点。我们可以仅使用最后一个geom_text复制您的问题:

ggplot(gb, aes(x = y, y = y1, fill = typeoft)) + 
    geom_text(data = labdat, aes(x = x,y = y,label = label))

Error in FUN(X[[i]], ...) : object 'typeoft' not found

之所以发生这种情况,是因为在aes中定义ggplot时,需要为xyfill设置一个值。当您在aes中调用geom_text时,xy的值将被覆盖,但fill的值不会被覆盖。因此,aes的{​​{1}}实际上是这样的:geom_text。但是,由于对象aes(x = x, y = y, label = label, fill = typeoft)中没有名为typeoft的变量,它将返回错误。

我们可以通过为您的labdat提供参数geom_text来停止这种行为:

inherit.aes = FALSE

现在,# This works! ggplot(gb, aes(x = y, y = y1, fill = typeoft)) + geom_text(data = labdat,aes(x = x, y = y, label = label), inherit.aes = FALSE) 的{​​{1}}仅包含您告诉它的内容。