grid.arrange要顯示多個面_包裹圖-如何使面板寬度一致?

我有一些數據被分為25個類別和6個父組,每個父組的類別數量不均勻(3到5)。對于每個父組,我使用facet_wrap根據類別創建單獨的面板,然后使用grid.arrange將父組圖顯示在一起。問題在于,由于每個父組中的類別數量不同,打印寬度會自動調整大小。是否有辦法手動設置打印寬度或創建空面板,以便寬度一致?

這里有簡單的娛樂活動:

library(dplyr)
library(gridExtra)

x <- c(1, 2, 3, 4, 1, 2)
y <- c(3, 3, 3, 3, 3, 3)
category <- c("category a", "category b", "category c", "category d", "category e", "category f")
group <- c("group one", "group one", "group one", "group one", "group two", "group two")
df <- data.frame(x, y, category, group)

group_one <- df %>% filter(group=="group one")
g1 <- ggplot(group_one, aes(x=x, y=y)) +
  geom_point() +
  facet_wrap(~category, nrow=1) +
  labs(title="Group One")

group_two <- df %>% filter(group=="group two")
g2 <- ggplot(group_two, aes(x=x, y=y)) +
  geom_point() +
  facet_wrap(~category, nrow=1) +
  labs(title="Group Two")

grid.arrange(g1, g2)

下面是上面代碼產生的結果-注意面板寬度不均勻。如何使兩組面板的寬度與第一組面板的寬度相同,且右側有空白?

如果有一個更簡單的方法來創建這種類型的情節安排與子目根據組,我很樂意聽到它!謝謝

? 最佳回答:

一種選擇是利用patchwork包。在您的示例代碼中,您可以

library(patchwork)

g1 / (g2 + plot_spacer()) 

作為一種更具普遍性的方法,您可以

  1. 把你的情節列在一個列表里
  2. 制作一個包含每組類別數的向量
  3. 在繪圖列表上循環,為每個繪圖添加一個間隔,并使用plot_layout設置每個子繪圖和間隔的寬度,以便面板對齊。

為了使示例更有趣,我添加了第三組:

library(dplyr)
library(ggplot2)
library(forcats)
library(stringr)

x <- c(1, 2, 3, 4, 1, 2, 1:3)
y <- c(3, 3, 3, 3, 3, 3, 1:3)
category <- c("category a", "category b", "category c", "category d", "category e", "category f", "category d", "category e", "category f")
group <- c("group one", "group one", "group one", "group one", "group two", "group two", "group three", "group three", "group three")
df <- data.frame(x, y, category, group)

p <- df %>% 
  # Set order of group
  mutate(group = forcats::fct_inorder(group)) %>% 
  split(.$group) %>% 
  purrr::imap(function(.data, .title) {
    ggplot(.data, aes(x=x, y=y)) +
      geom_point() +
      facet_wrap(~category, nrow=1) +
      labs(title = stringr::str_to_title(.title))  
  })

# Make a vector containing number of categories per group
ncat <- df %>% 
  group_by(group) %>% 
  summarise(n = n_distinct(category)) %>% 
  tibble::deframe()
ncat_max <- max(ncat)

library(patchwork)

p <- purrr::imap(p, function(x, y) {
  ncat <- ncat[[y]]
  n_spacer <- ncat_max - ncat
  # Add spacer to each plot and set widths
  x + plot_spacer() + plot_layout(ncol = 2, widths = c(ncat, n_spacer))
})

wrap_plots(p, nrow = length(p))

主站蜘蛛池模板: 国产精品亚洲不卡一区二区三区| 国产免费一区二区视频| 久久久国产精品一区二区18禁| 亚洲AV无码一区二区大桥未久 | 免费在线观看一区| 少妇激情AV一区二区三区| 美女视频黄a视频全免费网站一区| 色狠狠一区二区三区香蕉蜜桃| 乱码精品一区二区三区| 国产一在线精品一区在线观看| 日本高清天码一区在线播放| 3d动漫精品成人一区二区三| 波多野结衣中文一区二区免费| 亚洲国产系列一区二区三区| 国产一区视频在线免费观看| 无码精品前田一区二区| 一区二区三区四区在线观看视频 | 精品一区狼人国产在线| 色久综合网精品一区二区| 亚洲AV午夜福利精品一区二区| 97精品国产福利一区二区三区| 国产精品一区二区av不卡| 人妻AV一区二区三区精品| 精品一区二区三区四区电影| 精品欧洲av无码一区二区三区| 国产伦精品一区二区三区不卡| 3d动漫精品啪啪一区二区免费 | 国产一区二区三区国产精品| 精品国产日产一区二区三区| 日韩aⅴ人妻无码一区二区| 少妇精品久久久一区二区三区| 丰满岳妇乱一区二区三区| 日韩国产免费一区二区三区| 亚洲国产精品无码久久一区二区| 国产精品美女一区二区三区| 日韩人妻不卡一区二区三区 | 亚洲中文字幕久久久一区| 久久国产精品视频一区| 日韩人妻无码一区二区三区综合部 | 日本国产一区二区三区在线观看 | 亚洲熟妇AV一区二区三区浪潮|