geom_rect和ggplot2错误:美学属性必须是长度为1或与数据相同(2)

3

我正在尝试类似于https://dev59.com/cl0b5IYBdhLWcg3wENmK#29649406的东西,但是我遇到了错误:

错误:美学必须是长度为1或与数据相同(2):   xmin,xmax,ymin,ymax,x,y

'(2)'是什么意思?

都涉及哪些“美学”?我在ggplotgeom_rect中都有使用aes,但我不知道如何纠正它们... 我担心我永远无法掌握ggplot...

days<-rep(Sys.Date(),100)+seq(1,100)
v<-sin(as.numeric(days))
df<-data.frame(days=days,v=v)

shade <- data.frame(x1=c(as.Date('2017-10-15'),as.Date('2017-11-11')), 
                   x2=c(as.Date('2017-10-20'),as.Date('2017-11-13')), 
                   y1=c(-Inf,-Inf), y2=c(Inf,Inf))

library(ggplot2)
plot(ggplot(df,aes(x=days,y=v))
     +geom_line()
     +geom_rect(data=shade, 
               mapping=aes(xmin=x1, xmax=x2, ymin=y1, ymax=y2), color='grey', alpha=0.2)
     +geom_point())

1
顺便说一下,(2) 表示 data 的长度目前为 2。也就是说,美学只允许为 1 或 2,正如当前所定义的那样。@Z.Lin 的示例解释了原因。 - Axeman
1个回答

6
geom_rect 语句试图从顶部的语句 ggplot(df, aes(x = days, y = v)) 继承默认美学元素。
下面的语句可以正常工作:
ggplot(df, aes(x=days, y=v)) +
  geom_line() +
  geom_rect(data=shade, inherit.aes = F,
            aes(xmin=x1, xmax=x2, ymin=y1, ymax=y2), 
            color = 'grey', alpha=0.2) +
  geom_point()

这里输入图片描述

(我在代码中添加了更多的换行符/空格,以便于阅读。并且不需要将整个 ggplot 对象包装在 plot() 中。)


非常感谢!实际上,在https://dev59.com/cl0b5IYBdhLWcg3wENmK#29649406中,`geom_line`有自己的`Aesthetics`,而`ggplot`没有。 - Alessandro Jacopson
在RStudio中,我需要用plot()进行包装,否则不会生成任何图形... - Alessandro Jacopson
@AlessandroJacopson 这是因为你的 + 运算符在下一行的开头,而不是上一行的结尾。将它们移到上面(按照我的示例)你就会看到图形了。 - Z.Lin
在我的RStudio版本1.0.153(在Windows上),你的代码无法创建图表...不过我可以忍受它 :-) - Alessandro Jacopson
1
嗯,你是在获取脚本/将其包装在函数中吗?这个链接可能会有帮助。 - Z.Lin
我觉得我已经成功引入它了... 在RStudio中,我勾选了"保存时自动引入"选项。非常感谢你的帮助! - Alessandro Jacopson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接