ggplot2 >= 2.0.0版本中,layers的子集参数不再起作用。

10

我更新了最新版本的ggplot2,在打印图层中的子集时遇到了问题。

library(ggplot2)
library(plyr)
df <- data.frame(x=runif(100), y=runif(100))
ggplot(df, aes(x,y)) + geom_point(subset=.(x >= .5))

这些代码在版本1.0.1中有效,但在2.0.0中无效。它会抛出一个错误Error: Unknown parameters: subset

我找不到官方的变更日志或以某种方式对特定层进行子集。特别是因为这个plyr解决方案没有很好地记录,我认为我在Stack Overflow中找到了它。


可能不再受支持了,尽管在更改日志中我没有看到提及。https://github.com/hadley/ggplot2/releases/tag/v2.0.0 还有很多其他方法可以做到这一点。您特别需要这种方式吗? - Mike Wise
不,不需要这种方式,只是发现它非常方便...我对更好或其他解决方案持开放态度。 - drmariod
是的,它已经被废弃了 - 请注意这个注释:https://github.com/hadley/ggplot2/blob/34d0bd5d26a8929382d09606b4eda7a36ee20e5e/R/layer.r - Mike Wise
1
我可以写下来,你接受吗? - Mike Wise
1个回答

11

根据ggplot2 2.0.0代码的注释:

#' @param subset DEPRECATED. An older way of subsetting the dataset used in a
#'   layer.

可以在此处找到: https://github.com/hadley/ggplot2/blob/34d0bd5d26a8929382d09606b4eda7a36ee20e5e/R/layer.r

现在做到这一点的方法是:

library(ggplot2)
library(plyr)
df <- data.frame(x=runif(100), y=runif(100))
ggplot(df, aes(x,y)) + geom_point(data=df[df$x>=.5,])

或者这样,但要注意“非标准评估”(NSE):)

library(ggplot2)
library(plyr)
df <- data.frame(x=runif(100), y=runif(100))
ggplot(df, aes(x,y)) + geom_point(data=subset(df,x>=.5))

我认为这是最安全的选项,因为它没有NSE或美元符号字段选择器:

library(ggplot2)
library(plyr)
df <- data.frame(x=runif(100), y=runif(100))
ggplot(df, aes(x,y)) + geom_point(data=df[df[["x"]]>=.5,])

但是还有很多其他人使用管道等技术...


你能给我一些其他解决方案的提示吗?!我总是尽可能使我的代码行易读,并且我认为这些 df[df$x>.5,] 行非常难看;-) 我非常喜欢 subset 解决方案。 - drmariod
我猜通过使用 subset(df, x > .5),我最终会得到几乎与之前相同的结果,并且更易于阅读,不是吗?! - drmariod
哦,那就是你偶然发现的那个 :) - Mike Wise
1
啊,那就是交易的内容了?!;-) - drmariod
1
应该是一样的,但我认为我会把它发表为一个问题。ggplot 2.0.0 中有很多错误。 - Mike Wise
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接