我有一些点的情节,我想用段来连接它们
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)
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个错误
Error in eval(expr, envir, enclos) : object 'GROUP' not found
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
Gre*_*gor 21
初始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)
Run Code Online (Sandbox Code Playgroud)
选项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)
Run Code Online (Sandbox Code Playgroud)
选项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)
Run Code Online (Sandbox Code Playgroud)
大部分时间选项1都很好.但是,如果你想让一些美学被一个图层继承而你只想修改一个或两个,那就太烦人了.也许您正在为绘图添加一些错误栏,x并color在主数据和错误栏数据中使用相同和列名称,但您的错误栏数据没有y列.这是使用选项2或选项3以避免重复x和color映射的好时机.)