我们可能想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
为 global 的一部分,aes()
它也适用于geom_ribbon()
,但bar
没有它。
我发现了两种可能来逃避这个错误,其中一种是y=y
从原来的中删除ggplot(foo,aes(x=x,y=y))
,但是以后每次我都需要画一些我应该添加y=y
到aes()
不好的东西。
另一种可能性是将假y
列添加到bar
:
bar = cbind(bar, y=0)
p <- p + geom_ribbon(data=bar, aes(x=x,ymin=ymin,ymax=ymax), alpha=.1)
现在效果很好。但是我不喜欢这样做,因为它是一个假变量。有没有办法aes()
在ggplot()
调用时暂时禁用已经定义的geom_ribbon()
?