删除观测值太少的面

Drop facets with too few observations

如何使用 ggplot2 创建分面图,当且仅当分面中的观察值数量超过某个指定阈值时才绘制每个分面? This question 探讨了如何使用小平面中的观察数量来注释每个小平面,但我希望能够指定一个阈值,其中根本不绘制观察数量少于阈值的每个小平面。

这是我想指定阈值的绘图类型的简单示例:

require(ggplot2)
p <- ggplot(data,aes(x=xaxis)) + geom_density()
p <- p + facet_grid(ab1 ~ ab2)

这会生成一个多面图,其中某些方面的观察结果太少而没有意义,所以我想要一个空的 grid/space 而不是绘制误导性数据。

由于您想在没有足够数据时保留空分面(至少这是我理解您最后一句话的意思),对于太小的组,您可以将数据值替换为 NA

这是一个示例,使用内置的 mtcars 数据框。我们使用 dplyr 的链接运算符 (%>%) 按 carb 列进行分组,并对少于 8 行的所有组进行动态 NA 替换数据:

  library(ggplot2)
  library(dplyr)

  ggplot(mtcars %>% group_by(carb) %>%
           mutate(mpg = if(n() >= 8) mpg else NA_real_),
         aes(mpg)) + 
    geom_density() +
    facet_grid(. ~ carb)

如果您只想绘制至少有 8 个观察值的那些面,您可以这样做:

  ggplot(mtcars %>% group_by(carb) %>%
           filter(n() >= 8),
         aes(mpg)) + 
    geom_density() +
    facet_grid(. ~ carb)