Сократить пространство между сетками.

Я задал вопрос ЗДЕСЬ о расположении сетки и получил потрясающий ответ. Я хочу сократить пространство между сюжетами сейчас, но получить ошибку. Сначала я представляю код, который работает, а затем код ошибки (что я пытался). Я не могу найти grid.arrange и всегда предполагал, что он исходит от gridExtra, но я могу быть некорректным.

поэтому 2 части:

  • Как я могу уменьшить пробел между графиками с размещением сетки.
  • Где я могу найти документацию о grid.arrange (Baptiste Я знаю, что вы поддерживаете gridExtra, поэтому, пожалуйста, исправьте мое мышление или использование пакета, если я не использую его так, как он был предназначен.)

Хорошее плохое пространство кода

require(ggplot2);require(gridExtra)
A <- ggplot(CO2, aes(x=Plant)) + geom_bar() +
    coord_flip() + ylab("")
B <- ggplot(CO2, aes(x=Type)) + geom_bar() +coord_flip() 


 gA <- ggplot_gtable(ggplot_build(A))
 gB <- ggplot_gtable(ggplot_build(B))
 maxWidth = grid::unit.pmax(gA$widths[2:3], gB$widths[2:3])
 gA$widths[2:3] <- as.list(maxWidth)
 gB$widths[2:3] <- as.list(maxWidth)
 grid.arrange(gA, gB, ncol=1)

Плохой код (моя попытка)

require(ggplot2);require(gridExtra)
A <- ggplot(CO2, aes(x=Plant)) + geom_bar() +
    coord_flip() + ylab("") + theme(plot.margin= unit(1, "cm"))
B <- ggplot(CO2, aes(x=Type)) + geom_bar() +coord_flip() 


 gA <- ggplot_gtable(ggplot_build(A))
 gB <- ggplot_gtable(ggplot_build(B))
 maxWidth = grid::unit.pmax(gA$widths[2:3], gB$widths[2:3])
 gA$widths[2:3] <- as.list(maxWidth)
 gB$widths[2:3] <- as.list(maxWidth)
 grid.arrange(gA, gB, ncol=1)

Ошибка:

Error in `[.unit`(theme$plot.margin, 2) : 
  Index out of bounds (unit subsetting)

Ответ 1

Я неправильно понял ggplot:

require(ggplot2);require(gridExtra)
A <- ggplot(CO2, aes(x=Plant)) + geom_bar() +
    coord_flip() + ylab("") + theme(plot.margin= unit(c(1, 1, -1, 1), "lines"))
B <- ggplot(CO2, aes(x=Type)) + geom_bar() +coord_flip() + 
    theme(plot.margin= unit(rep(.5, 4), "lines"))


 gA <- ggplot_gtable(ggplot_build(A))
 gB <- ggplot_gtable(ggplot_build(B))
 maxWidth = grid::unit.pmax(gA$widths[2:3], gB$widths[2:3])
 gA$widths[2:3] <- as.list(maxWidth)
 gB$widths[2:3] <- as.list(maxWidth)
 grid.arrange(gA, gB, ncol=1)

Ответ 2

Да, doc говорит: plot.margin | маржа вокруг всего участка (единица с размерами верхнего, правого, нижнего и левого полей)