【问题标题】:Temporarily disable aesthetics already defined in ggplot()暂时禁用 ggplot() 中已经定义的美学
【发布时间】: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 我现在很忙。随意自己写一个答案。
  • 在使用新数据集时尝试inherit.aes = FALSE。查看答案和 cmets herehere

标签: r ggplot2 aesthetics


【解决方案1】:

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

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

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

【讨论】:

  • aes.override 记录在哪里,或者你能提供一个例子吗?谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
  • 2015-04-22
相关资源
最近更新 更多