如何在 face_grid-like 结构中按列固定比例?

How to fix scales by columns in a face_grid-like construction?

我知道 facet_grid 不允许在行或列内自由缩放。所以我用 facet_wrap 试试运气。

除了我目前所拥有的,

data <- data.frame(
    cols = c("A", "A", "A", "A", "B", "B", "B", "B"),
    rows = c(1, 1, 2, 2, 1, 1, 2, 2),
    x = c(0, 90, 0, 110, 0, 900, 0, 1100),
    y = c(0, 90, 0, 110, 0, 900, 0, 1100)
)
library(ggplot2)
p <- ggplot(data, aes(x = x, y = y)) +
    geom_line() +
    facet_wrap(~ rows + cols, scales = "free")

如何固定列中的水平刻度(阅读:每列分别)?也就是说,如何让水平[0, 75]轴与水平[0, 90]轴对齐,水平[0, 750]轴与水平[0, 900]轴对齐?

理想情况下,这会隐藏除最后一行以外的所有横轴标签。

如果你敢尝试 github 包,我最近在 ggh4x 包的开发版本中添加了 facet_grid() 的扩展版本(免责声明:我编写了包)。它区分 'free' 的比例 - 可以在行/列之间变化 - 与 'independent' 和自由的比例,它们也可以在行/列内变化。我想这些函数非常适合您的问题。

library(ggplot2)
library(ggh4x) # devtools::install_github("teunbrand/ggh4x")

data <- data.frame(
  cols = c("A", "A", "A", "A", "B", "B", "B", "B"),
  rows = c(1, 1, 2, 2, 1, 1, 2, 2),
  x = c(0, 90, 0, 110, 0, 900, 0, 1100),
  y = c(0, 90, 0, 110, 0, 900, 0, 1100)
)

library(ggplot2)
ggplot(data, aes(x = x, y = y)) +
  geom_line() +
  facet_grid2(rows ~ cols, scales = "free", independent = "y")

reprex package (v1.0.0)

于 2021-04-16 创建

由于我上周左右才添加该功能并且尚未进行广泛测试,如果您发现任何错误或有改进建议,请告诉我。