拼凑而成的空地块 space 与所有其他地块的大小相同

Empty plot space in patchwork same size as all other plots

我正在使用拼凑法在网格中绘制一系列大小相同的图。我的网格是 5 x 6,预计最后 2 行我只有 4 个图,而不是 5 个。我想要空图,以便图显示为规则网格。

XXXXX
XXXXX
XXXXX
XXXXX
XXXX
XXXX

我可以使用 cowplot NULL,但发现间距很奇怪,所以切换到拼凑。 plot_spacer() 没有像我预期的那样工作,因为它改变了该行其余部分的对齐方式。

library(tidyverse)
library(latex2exp)
library(patchwork)


genCircle <-
  function(center = c(0.0, 0.0), 
           rad = 1.0,
           npoints = 100) {
    # fcn for circle plots
    r = rad
    tt <- seq(0, 2 * pi, length.out = npoints)
    xx <- center[1] + r * cos(tt)
    yy <- center[2] + r * sin(tt)
    return(data.frame(x = xx, y = yy))
  }

dat = genCircle()

line1 = sprintf("$A = %0.2f$, $B = %0.3f$",
                1.6,
                3.7
)

line2 = sprintf("$\hat{C} = %0.1f$,$ \hat{%s} = %0.1f$",
                12.6,
                "D",
                86.3
)


p1 <- ggplot(data = dat, mapping = aes(x = x, y = y)) + 
  geom_path(size =0.3)  + 
  geom_abline(color = 'gray77', size = 0.1) + 
  coord_fixed() +
  ggtitle(TeX(line1)) +  labs(subtitle = TeX(line2)) +
  theme(plot.title = element_text(size = 9, hjust = 0, margin=margin(b=0)), plot.subtitle = element_text(size = 9, hjust = 0, margin=margin(b=0)), legend.title = element_blank(), legend.margin=margin(l = -2, unit='pt'), axis.text.x=element_blank(), axis.ticks.x=element_blank(), axis.text.y=element_blank(), axis.ticks.y=element_blank(), axis.title = element_blank(), plot.margin = unit(c(0.1,-0.1,0,0), "cm"))

(p1|p1|p1) / (p1|p1|p1) / (p1|p1|plot_spacer())

有没有简单的方法来保持网格结构?

对于在特定位置有空图的规则网格,patchwork::plot_layout 采用设计参数,其中可以使用 #

放置空字段
p7 <- p6 <- p5 <- p4 <- p3 <- p2 <- p1

design <- "
  123
  45#
  67#
"

p1 + p2 + p3 + p4 + p5 + p6 + p7 + plot_layout(design = design)