R 添加具有不同数据的图层时,未找到ggplot对象错误

R 添加具有不同数据的图层时,未找到ggplot对象错误,r,ggplot2,R,Ggplot2,我有一个带有一些点的绘图,我想用线段来连接它们 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

我有一个带有一些点的绘图,我想用线段来连接它们

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

我做错了什么?

在初始
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很好。但是,如果您希望某个层继承某些美学,并且只想修改一个或两个,那么这可能会很烦人。可能您正在向绘图添加一些错误条,并在主数据和错误条数据中使用相同的
x
color
列名,但错误条数据没有
y
列。现在正是使用选项2或选项3避免重复
x
color
映射的好时机。

我们是否对此有R-FAQ?我想我在上周看到了3个…在
geom_段
层中设置
inherit.aes=FALSE
。为了一个傻瓜。。。但我喜欢这个简单。而dupe的答案可能有点过时。为什么要投否决票?这是一个很好重复的问题,可以被制作成一个标准的复制品!对于一致的图例,选项3可能会在
+注释\u自定义(…)
时添加错误,但在
+注释\u自定义(…,inherit.aes=F)
时,我会看到:
未使用的参数(inherit.aes=F)
在进一步调查中,我可能偶然发现了一个edgecase(请参阅,)