【问题标题】:Order nested facet labels in facet_grid在 facet_grid 中排序嵌套的 facet 标签
【发布时间】:2016-07-12 10:44:31
【问题描述】:

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

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

产生以下情节:

现在,在大多数情况下,情节看起来很棒,但是对于右侧的标签,我们看到 cyl 被标记为“第一”(即靠近情节)并且 am 嵌套在外面,但情节的布局方式很明显,分面显示时 am 嵌套在 cyl 中。

所以,我想更改标签的列出顺序,以便 am 级别在 cyl 级别中列出以反映布局。我试图搜索诸如“facet_grid order labels”或“nested facet label order ggplot2”之类的东西,但我发现的几乎所有结果都与更改给定方面的实际级别的顺序有关,而不是问题我已经描述过了。此外,我研究了对贴标器的修改,但该函数似乎是在确定标签的位置后调用的。

感谢您的帮助!

【问题讨论】:

  • 对公式重新排序似乎会给您带来相反的问题,所以它看起来像label_both 的奇怪之处。如果愿意,您可以编写自己的贴标机。
  • @alistaire 我不认为这是一个标签问题,因为我最初没有使用 label_both(为了情节清晰而添加它),但标签仍然以相同的顺序出现。跨度>

标签: r ggplot2 label facet


【解决方案1】:

您看到的标签排序似乎只是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)

【讨论】:

  • 感谢您的精彩回答!
猜你喜欢
  • 2017-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-28
  • 1970-01-01
  • 2016-04-01
  • 1970-01-01
相关资源
最近更新 更多