4

我们可能想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=yaes()不好的东西。

另一种可能性是将假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()

4

1 回答 1

4

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

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

PS:对于传说,您现在可以通过以下方式覆盖审美aes.override

于 2012-12-11T15:53:26.447 回答