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

标签 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=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都很好。但是,如果您希望某些美学被图层继承并且只想修改一个或两个,可能会很烦人。也许您正在向图中添加一些错误栏,并在主数据和错误栏数据中使用相同的xcolor列名称,但您的错误栏数据没有y列。这是使用选项2或选项3避免重复xcolor映射的好时机。)

关于r - 添加具有不同数据的图层时,ggplot对象未找到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40391272/

相关文章:

r - 将 ggsave 与管道一起使用

r - 使用 facet_wrap 和 ggplot2 在每个方面绘制整个数据

r - 在 R 中的 facet_wrap 图中向所有方面添加 geom_line

r - 情节标题、标签等中的字符串和表达式

r - 排除超过阈值的行

r - 如何通过多个for循环使Rcpp代码高效?

r - 提供 hclust 对象时加速热图和热图中的错误(NMF 包)

r - 操纵 Y 轴限制不起作用(ggplot2 百分比条形图)

r - 如何在变成因子的变量中保留原始值?

r - 自动将 p 值添加到 facet plot