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