【问题标题】:facet_wrap with layout like facet_gridfacet_wrap 布局类似于 facet_grid
【发布时间】:2020-02-16 23:37:56
【问题描述】:

使用facet_grid 根据所提供变量中的因子水平包装面板,即使给定组合不存在数据。这是我所追求的行为。

不幸的是,y 轴刻度不能独立于单个面板级别(请参阅herehere)。为此,您必须使用facet_wrap

但是,facet_wrap 不提供与facet_grid 相同的布局,并且仅显示具有要绘制的值的面板。

我怎样才能保持facet_grid-like 布局但具有独立的 y 轴刻度?如果没有数据的面板是空白/无效的,只要它们占据适当的空间,就可以了。

可重现的例子:

library(ggplot2)
set.seed(1)

# Generate data
test <- data.frame(x = c(rep(1, 6), rep(2, 6)), 
                   facet_1 = rep(c("A", "A", "A", "B", "B", "C"), 2),
                   facet_2 = rep(c("B", "C", "D", "C", "D", "D"), 2),
                   y = c(1e0, 1e1, 1e2, 1e3, 1e4, 1e5, rnorm(1, 1e0, 1e0*.34), rnorm(1, 1e1, 1e1*.34), rnorm(1, 1e2, 1e2*.34), rnorm(1, 1e3, 1e3*.34), rnorm(1, 1e4, 1e4*.34), rnorm(1, 1e5, 1e5*.34)))

# facet_grid - Shows blank panels B-B, B-C, and C-C. This is what I want.
#            - Does NOT scale y appropriately at the individual panel level.
ggplot(test, aes(x = x, y = y)) +
  facet_grid(facet_2 ~ facet_1, scales = "free") +
  geom_line()

# facet_wrap - Does NOT show blank panels B-B, B-C, and C-C.
#            - Does scale y appropriately at the individual panel level.
ggplot(test, aes(x = x, y = y)) +
  facet_wrap(vars(facet_1, facet_2), scales = "free") +
  geom_line()

【问题讨论】:

    标签: r ggplot2 data-visualization facet


    【解决方案1】:

    您可以complete 缺少的组合,然后进行绘图。

    library(ggplot2)
    
    tidyr::complete(test, facet_1, facet_2, fill = list(x = 0, y = 0)) %>%
    #Keeping them as NA would give a blank plot
    #tidyr::complete(test, facet_1, facet_2) %>%
       ggplot() + aes(x = x, y = y) +
       facet_wrap(vars(facet_1, facet_2), scales = "free") +
       geom_line()
    

    这会给您一个警告,因为这 3 组中只有一个观察值。

    【讨论】:

      猜你喜欢
      • 2017-11-12
      • 2016-10-06
      • 2012-12-25
      • 2022-09-29
      • 1970-01-01
      • 1970-01-01
      • 2014-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多