ggplot2:关于列函数的faceting

nsh*_*eff 6 r facet ggplot2

无法找到答案 - 在ggplot2中,是否可以在列的函数上进行分析,而不是直接对列的值进行分析?

简单可重复的例子:

样本数据:

df=data.frame(dat=c(1,2,5,5,7))
Run Code Online (Sandbox Code Playgroud)

这有效:

ggplot(df, aes(x=1:5, y=dat, colour=factor(dat > 3))) + 
       geom_point() + facet_grid(dat ~ .)
Run Code Online (Sandbox Code Playgroud)

这不是:

ggplot(df, aes(x=1:5, y=dat, colour=factor(dat > 3))) + 
       geom_point() + facet_grid((dat > 3) ~ .)
Run Code Online (Sandbox Code Playgroud)

一种解决方案是为方面添加一列.这有效:

df$facet=df$dat>3
ggplot(df, aes(x=1:5, y=dat, colour=factor(dat > 3))) + 
       geom_point() + facet_grid(facet ~ .)
Run Code Online (Sandbox Code Playgroud)

但有没有办法在不必向data.frame添加新列的情况下执行此操作?

ton*_*nov 2

我提出了一个折衷的解决方案,这是评论部分中发布的 @Nathan 和 @\xd0\xafaffael 的参数之间的权衡。

\n\n
FacetingFunction <- function(df) {df$dat > 3}\nArbitraryFacetingPlot <- function(df, FacetingFunction) {\n  df$facet <- FacetingFunction(df)\n  p <- ggplot(df, aes(x=1:5, y=dat, colour=factor(dat > 3))) + \n    geom_point() + \n    facet_grid(facet ~ .)\n  df$facet <- NULL\n  p\n}\n\nArbitraryFacetingPlot(df, FacetingFunction)\nArbitraryFacetingPlot(df, function(df) {df$dat==5})\n
Run Code Online (Sandbox Code Playgroud)\n