在 facet_grid 中订购嵌套的分面标签

Order nested facet labels in facet_grid

所以,我正在尝试制作一个由三个不同变量分面的图网格。我可以很好地生成绘图网格,唯一的问题是标签的放置顺序似乎乱七八糟。这是我正在做的一个简单示例:

library(ggplot2)
data(mtcars)
qplot(mpg, wt, data=mtcars) + facet_grid(cyl +am ~ vs, labeller = label_both)

产生以下情节:

现在,在大多数情况下,情节看起来不错,但对于右侧的标签,我们看到 cyl 被标记为 "first"(即接近情节)和 am 嵌套在外面,但情节的布局方式,很明显,这些方面显示 am嵌套在 cyl 中。

所以,我想更改标签列出的顺序,以便 am 水平列在 cyl 水平内以反映布局。我曾尝试搜索 "facet_grid order labels" 或 "nested facet label order ggplot2" 之类的内容,但我发现的几乎所有结果都与更改给定方面的实际级别的顺序有关,而不是我遇到的问题描述。此外,我研究了对贴标机的修补,但该函数似乎是在确定标签的位置后调用的。

感谢您的帮助!

您看到的标签排序似乎正是 ggplot 对标签排序的标准方式。如果你交换公式中变量的顺序,标签也会改变位置,但这同时也会重新排列行,这可能不是你想要的:

qplot(mpg, wt, data=mtcars) +
    facet_grid(am + cyl ~ vs, labeller = label_both)

正如 alistaire 所建议的那样,您确实可以使用贴标机来解决这个问题。以下函数以相反的顺序调用 label_both() 标签数据框的列:

label_rev <- function(labels, multi_line = TRUE, sep = ": ") {
  label_both(rev(labels), multi_line = multi_line, sep = sep)
}

它导致了预期的结果:

qplot(mpg, wt, data=mtcars) +
    facet_grid(cyl + am ~ vs, labeller = label_rev)