一组多面图

时间:2018-10-09 03:37:47

标签: r ggplot2 tidyverse cowplot

是否可以对一组分面图进行分面?我很想facet_wrap一组多面图。

我想出的最好的办法是一个cowplot解决方案,它不能很好地工作。理想情况下,我们不必编写单独的图形对象。

library(ggplot2)
library(cowplot)


g1 <- ggplot(mtcars, aes(disp, mpg)) + geom_point() + facet_wrap(~am)
g2 <- ggplot(mtcars, aes(disp, cyl)) + geom_point() + facet_wrap(~am)
plot_grid(g1, g2, labels = c("Facet Group 1", "Facet Group 2"))

reprex package(v0.2.0)于2018-10-08创建。

编辑:

我很欣赏下面的“重塑数据”方法,但是对于我要完成的工作,它们并不起作用。我想创建构面的层次结构,其中“ Facet Group 1 / Facet Group 2”的级别高于am。如果愿意,“重塑数据”方法可以“融化”层次结构。

编辑2:

在这里,我制作了四个独立的多面图形,然后将它们放置在LaTeX中。如果存在,仍然会一个ggplot解决方案!

enter image description here

2 个答案:

答案 0 :(得分:1)

我能想到的最简单的解决方案是修改数据本身。但是也许对于这个问题没有那么“骇人听闻”的解决方案。

for i,x in enumerate(x1d):
    for j,y in enumerate(y1d):
        z[i,j] = np.exp(-(x**2 + y**2))

reprex package(v0.2.1)于2018-10-09创建

答案 1 :(得分:1)

您可以具有多个层面。在这里,我们只需要稍微修改一下数据

library(ggplot2)
library(dplyr)
library(tidyr)

mtcars %>% 
  select(disp, am, mpg, cyl) %>% 
  gather("measure", "y", mpg, cyl) %>% 
  ggplot(aes(disp, y)) + 
  geom_point() + facet_wrap(~measure+am,nrow = 1)

enter image description here

但是,如果您真的需要控制每个条带的传播距离,您可能就不会有好时光。