【发布时间】:2012-11-29 03:09:31
【问题描述】:
我们可能想为ggplot() 图形定义一些全局aes(),但在某些层中排除它们。例如假设以下示例:
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() 的一部分,该全局 aes() 也适用于 geom_ribbon(),但 bar 没有它。
我发现了两种可能来避免这个错误,其中之一是从原始ggplot(foo,aes(x=x,y=y)) 中删除y=y,但是以后每次我需要绘制一些东西我应该添加y=y 到@987654335 @那不好。
另一种可能性是在bar 中添加一个假的y 列:
bar = cbind(bar, y=0)
p <- p + geom_ribbon(data=bar, aes(x=x,ymin=ymin,ymax=ymax), alpha=.1)
现在效果很好。但是我不喜欢这样做,因为它是一个假变量。有什么方法可以在调用geom_ribbon()时暂时禁用ggplot()中已经定义的aes()?
【问题讨论】:
-
aes(y=NULL,x=x,ymin=ymin,ymax=ymax)怎么样? -
正如@ErnestA 所说,您可以通过在特定图层中将它们设置为
NULL来取消映射美学。 -
@ErnestA 为什么不将您的评论作为答案?
-
@agstudy 我现在很忙。随意自己写一个答案。
标签: r ggplot2 aesthetics