【问题标题】:ggplot object not found error when adding layer with different data添加具有不同数据的图层时,ggplot对象未找到错误
【发布时间】:2016-11-03 07:30:18
【问题描述】:

我有一个包含一些点的情节,我想使用段来连接它们

dummy = data.frame(GROUP=c("A","B","C","D"),
                   X = c(80,75,68,78),
                   Y=c(30, 32,36,33)

)
df= data.frame(x1 = c(80), x2 =c(78) , y1=c(30), y2 =c(33))
df
library(ggplot2)
ggplot(dummy,aes(x=X,y=Y,color=GROUP)) + 
  geom_point() +
  geom_segment(aes(x=x1,y=y1,xend= x2, yend =y2), data = df) 

但我收到此错误

Error in eval(expr, envir, enclos) : object 'GROUP' not found

我在这里做错了什么?

【问题讨论】:

  • 我们有这方面的 R-FAQ 吗?我想我上周看过 3 次...
  • geom_segment层中设置inherit.aes = FALSE
  • The best I could find 是一个骗子……但我喜欢这个简单的。被骗的答案可能有点过时了。
  • 为什么投反对票?这是一个可以很好地重现的问题,可以变成一个典型的骗子!

标签: r ggplot2


【解决方案1】:

在初始ggplot 调用中定义的美学映射将被所有层继承。由于您使用 color = GROUP 初始化绘图,ggplot 将在后续层中查找 GROUP 列,如果不存在则抛出错误。有 3 个不错的选择可以解决这个问题:

选项1:在不想继承美学的图层中设置inherit.aes = F。大多数时候这是最好的选择。

ggplot(dummy,aes(x = X, y = Y, color = GROUP)) + 
  geom_point() +
  geom_segment(aes(x = x1, y = y1, xend = x2, yend = y2),
               data = df,
               inherit.aes = FALSE) 

选项 2: 仅在顶部调用中指定要继承(或将覆盖)的美学 - 在层级别设置其他美学:

ggplot(dummy,aes(x = X, y = Y)) + 
  geom_point(aes(color = GROUP)) +
  geom_segment(aes(x = x1, y = y1, xend = x2, yend = y2),
               data = df) 

选项 3: 特别是 NULL 不适用图层时的美学效果。

ggplot(dummy,aes(x = X, y = Y, color = GROUP)) + 
  geom_point() +
  geom_segment(aes(x = x1, y = y1, xend = x2, yend = y2, color = NULL),
               data = df) 

使用哪个?

大多数时候选项 1 都很好。但是,如果您希望某个图层继承某些美学并且您只想修改一两个,这可能会很烦人。也许您正在向绘图添加一些错误栏并在主数据和错误栏数据中使用相同的xcolor 列名,但您的错误栏数据没有y 列。这是使用选项 2 或选项 3 以避免重复 xcolor 映射的好时机。)

【讨论】:

  • 为了获得一致的图例,选项 3 可以添加 show.legend = FALSE
  • + annotation_custom(..) 时出现错误,但当+ annotation_custom(..., inherit.aes = F) 然后我看到:unused argument (inherit.aes = F)
  • 在进一步调查中,我可能偶然发现了一个边缘案例(请参阅herehere
猜你喜欢
  • 2017-10-14
  • 1970-01-01
  • 1970-01-01
  • 2020-04-15
  • 2018-06-24
  • 1970-01-01
  • 2018-06-28
  • 1970-01-01
  • 2021-10-06
相关资源
最近更新 更多