【问题标题】:Fill ggplot facet panel with white space in loop在循环中用空白填充 ggplot facet panel
【发布时间】:2017-08-25 15:02:12
【问题描述】:

lotsquestions 中有关于如何使用循环在网格中排列 ggplots。但是,我无法拼凑出我想要的东西。

我想在一个循环中绘制任意数量的相同大小的图形。至关重要的是,我想使用facet_wrap 并将数据预先分组(解释如下)。这是一个例子:

df <- mtcars
df$car <- rownames(df)

ucar <- unique(df$car)

# Split data into groups of n (6's here)
split6s <- split(ucar, ceiling(seq_along(ucar)/6))

p <- list()

# For each group of 6, plot something (mpg vs wt) faceted by group (car)
for(i in 1 :length(split6s)){
  # Subset for group
  temp <- subset(df, car %in% split6s[[i]])    

    # Save plot forcing facet with 1 row
    p[[i]] <- ggplot(temp, aes(mpg, wt)) + geom_point() + 
                facet_wrap(~car, nrow = 1)
}

p[[5]]

p[[6]]

想要的p[[6]]

我想这样做,以便我可以标准化 rmarkdown 中某些图的大小,但使用构面而不是仅仅将单个图一起抓取。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    我不确定这是否是您正在寻找的解决方案。

    library(ggplot2)
    library(grid)
    
    df <- mtcars
    df$car <- rownames(df)
    ucar <- unique(df$car)
    split6s <- split(ucar, ceiling(seq_along(ucar)/6))
    
    p <- list()
    for(i in 1 :length(split6s)){
      temp <- subset(df, car %in% split6s[[i]])    
      p[[i]] <- ggplot(temp, aes(mpg, wt)) + geom_point() + 
                    facet_wrap(~car, nrow = 1)
    }
    
    g5 <- ggplotGrob(p[[5]])
    g6 <- ggplotGrob(p[[6]])
    
    # Delete left panels     
    for (k in c(4:7, 16:19, 34:37)) {
      g5$grobs[[k]] <- nullGrob()
    }
    # Copy Maserati and Volvo panels
    g5$grobs[[2]] <-  g6$grobs[[2]]
    g5$grobs[[3]] <-  g6$grobs[[3]]
    g5$grobs[[14]] <-  g6$grobs[[6]]
    g5$grobs[[15]] <-  g6$grobs[[7]]
    g5$grobs[[32]] <-  g6$grobs[[12]]
    g5$grobs[[33]] <-  g6$grobs[[13]]
    # Move left x-axis label
    g5$grobs[[39]]$children[[1]]$x <- unit(1/6, "npc")
    
    grid.draw(g5)
    

    【讨论】:

    • 我认为这给了我一个很好的开始。我需要使用这些数字,以便它自动知道要删除多少面板。在我的实际代码中,最后一个图中的面板数量将根据我的数据而变化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    相关资源
    最近更新 更多