【问题标题】:Wrap one dimension in facet_grid (ggplot2)在 facet_grid (ggplot2) 中包裹一维
【发布时间】:2015-08-17 09:27:17
【问题描述】:

我正在使用 facet_grid 根据两个因素共同可视化数据。一个因素是太多级别无法容纳在一行中。因此,我想实现类似 facet_wrap 的东西,但有 2 个维度:

  1. facet_wrap 可以与两个因素一起使用吗?
  2. 可以使用 facet_grid 覆盖一个因素吗?

输出应该类似于

A    B    C
.    .    .  1
.    .    .  2

D    E       
.    .       1
.    .       2

因子 1 为 5 个级别 A-E,包裹在 2 行中,因子 2 为两个级别 1-2,在每一行上重复。

这是一个实际的例子:

library(ggplot2)
df <- data.frame(y=rnorm(1000), f1=rep(1:10, 100), f2=rep(1:2, each=500))
ggplot(df, aes(x=x)) + geom_histogram() + facet_grid(f2~f1)

我想将图像一分为二,前五层在上,后五层在下,同时保持每行的 1 行和 2 行。

非常感谢您的考虑!

【问题讨论】:

  • 请提供一个可重现的例子
  • 如果没有可重复的数据就帮不上什么忙了,但是您可能想探索将它们分成两个图,然后将它们安排到一个显示中。请参阅stackoverflow.com/questions/30015175/… 以获取接近(但不准确)的方法示例
  • facet_wrap 可以与多种因素一起使用,例如facet_wrap(~a+b)
  • 不幸的是,这并没有保留网格布局,它只是列出了所有因素的组合,导致 A1 A2 B1 B2 等。

标签: r ggplot2 facet-wrap


【解决方案1】:

ggplot2 中没有执行此操作的内置功能,但您可以使用 gridExtra 中的grid.arrange 来近似此行为:

library(gridExtra)
p1 <- ggplot(df[df$f1 %in% 1:5,], aes(x=y)) + 
    geom_histogram() + 
    facet_grid(f2~f1)
p2 <- ggplot(df[df$f1 %in% 6:10,], aes(x=y)) + 
    geom_histogram() + 
    facet_grid(f2~f1)

grid.arrange(p1,p2,nrow = 2)

两个独立地块之间的对齐通常不会完美。它可以更精确地对齐,但并非不费吹灰之力(grid中的详细摆弄)。

【讨论】:

  • 非常感谢。这似乎确实是我想要的最接近的东西!
猜你喜欢
  • 2013-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
  • 2018-11-03
  • 2015-01-23
相关资源
最近更新 更多