ggplot2:关于列函数的faceting

时间:2013-11-21 10:41:27

标签: r ggplot2 facet

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

简单可重复的例子:

示例数据:

df=data.frame(dat=c(1,2,5,5,7))

这有效:

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

这不是:

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

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

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

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

1 个答案:

答案 0 :(得分:2)

我提出了一个妥协解决方案,这是在评论部分发布的@Nathan和@Яaffael的论点之间的权衡。

FacetingFunction <- function(df) {df$dat > 3}
ArbitraryFacetingPlot <- function(df, FacetingFunction) {
  df$facet <- FacetingFunction(df)
  p <- ggplot(df, aes(x=1:5, y=dat, colour=factor(dat > 3))) + 
    geom_point() + 
    facet_grid(facet ~ .)
  df$facet <- NULL
  p
}

ArbitraryFacetingPlot(df, FacetingFunction)
ArbitraryFacetingPlot(df, function(df) {df$dat==5})