Gráficos marginais usando axis_canvas no gráfico de vaca: como inserir espaço entre o painel principal e gráficos marginais

A seguir, surgiu um comentário paraesta postagem: Ao fazer parcelas marginais com oaxis_canvas() função no lote, como podemos criar uma lacuna entre o gráfico principal e o gráfico marginal?

Código de exemplo:

require(cowplot)

pmain <- ggplot(data = mpg, aes(x = cty, y = hwy, color = factor(cyl))) + 
  geom_point() + 
  xlab("City driving (miles/gallon)") +
  ylab("Highway driving (miles/gallon)") +
  theme_minimal()

xbox <- axis_canvas(pmain, axis = "x", coord_flip = TRUE) + 
  geom_boxplot(data = mpg, aes(y = cty, x = factor(cyl), color = factor(cyl))) + 
  scale_x_discrete() + coord_flip()
ybox <- axis_canvas(pmain, axis = "y") + 
  geom_boxplot(data = mpg, aes(y = hwy, x = factor(cyl), color = factor(cyl))) +
  scale_x_discrete()

p1 <- insert_xaxis_grob(pmain, xbox, grid::unit(0.6, "in"), position = "top")
p2 <- insert_yaxis_grob(p1, ybox, grid::unit(0.6, "in"), position = "right")
ggdraw(p2)

Como podemos ver neste exemplo, os boxplots marginais tocam diretamente no painel de plotagem principal. O objetivo é gerar alguma lacuna. Como isso pode ser feito?

questionAnswers(1)

yourAnswerToTheQuestion