暂时禁用ggplot()中已定义的美学

时间:2012-12-11 14:57:12

标签: r ggplot2 aesthetics

我们可能希望为aes()图片定义一些全局ggplot(),但在某些图层中将其排除。例如,假设以下示例:

foo <- data.frame(x=runif(10),y=runif(10))
bar <- data.frame(x=c(0,1),ymin=c(-.1,.9),ymax=c(.1,1.1))
p <- ggplot(foo,aes(x=x,y=y))+geom_point()

一切都很好。但是在尝试添加功能区时:

p <- p + geom_ribbon(data=bar, aes(x=x,ymin=ymin,ymax=ymax), alpha=.1)
# Error: Discrete value supplied to continuous scale

发生此错误是因为我们已将y定义为全局aes()的一部分,该geom_ribbon()也适用于bar,但y=y没有。{ / p>

我发现有两种可能性可以逃避此错误,其中一种方法是从原始ggplot(foo,aes(x=x,y=y))中移除y=y,但是每次我需要绘制一些我应该添加的内容{{1}对于不好的aes()

另一种可能性是向y添加假bar列:

bar = cbind(bar, y=0)
p <- p + geom_ribbon(data=bar, aes(x=x,ymin=ymin,ymax=ymax), alpha=.1)

enter image description here

现在效果很好。但是我不喜欢这样做,因为它是一个虚假的变量。有没有办法在调用aes()时临时禁用ggplot()中已定义的geom_ribbon()

1 个答案:

答案 0 :(得分:3)

如@ErnestA的评论中所说,我们可以通过将它们设置为NULL来取消美学的映射

      aes(y=NULL,x=x,ymin=ymin,ymax=ymax)

PS:对于图例,您现在可以通过aes.override

覆盖美学