图层中的子集参数不再适用于 ggplot2 >= 2.0.0

subset parameter in layers is no longer working with ggplot2 >= 2.0.0

我更新到最新版本 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 解决方案没有很好的记录,我想我在堆栈溢出的某个地方找到了它。

根据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,])

或者这个,(但要注意 "Non Standard Evaluation" (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 或 dollar-sign 字段选择器:

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,])

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