标记图组

Label group of plots

我将九个地块合并在一起,我想根据不同的特征(A、B、C)对它们进行分组。有没有一种简单的方法可以在图的底部添加标签或注释?使用 cowplotGridExtra 时,我收到以下错误:

 In as_grob.default(plot) :
  Cannot convert object of class list into a grob.

示例数据

list(list(stats = structure(c(43, 96.5, 297.5, 707.5, 778), .Dim = c(5L, 
                                                                     1L)), n = 36, conf = structure(c(136.603333333333, 458.396666666667
                                                                     ), .Dim = 2:1), out = numeric(0), group = numeric(0), names = ""), 
     list(stats = structure(c(2, 10.5, 55.5, 102, 128), .Dim = c(5L, 
                                                                 1L)), n = 36, conf = structure(c(31.405, 79.595), .Dim = 2:1), 
          out = numeric(0), group = numeric(0), names = ""), 
     list(stats = structure(c(1, 3, 5.5, 77, 88), .Dim = c(5L, 
                                                           1L)), n = 36, conf = structure(c(-13.9866666666667, 24.9866666666667
                                                           ), .Dim = 2:1), out = numeric(0), group = numeric(0), names = ""), 
     list(stats = structure(c(531, 632.5, 701, 726.5, 786), .Dim = c(5L, 
                                                                     1L)), n = 36, conf = structure(c(676.246666666667, 725.753333333333
                                                                     ), .Dim = 2:1), out = c(485, 464, 446), group = c(1, 1, 1
                                                                     ), names = ""), list(stats = structure(c(104, 
                                                                                                                                    109.5, 113.5, 121, 125), .Dim = c(5L, 1L)), n = 36, conf = structure(c(110.471666666667, 
                                                                                                                                                                                                           116.528333333333), .Dim = 2:1), out = c(91, 91, 88, 84, 84, 
                                                                                                                                                                                                                                                   79), group = c(1, 1, 1, 1, 1, 1), names = ""), 
     list(stats = structure(c(28, 53.5, 83.5, 88, 91), .Dim = c(5L, 
                                                                1L)), n = 36, conf = structure(c(74.415, 92.585), .Dim = 2:1), 
          out = numeric(0), group = numeric(0), names = ""), 
     list(stats = structure(c(80, 89, 102.5, 153, 236), .Dim = c(5L, 
                                                                 1L)), n = 36, conf = structure(c(85.6466666666667, 119.353333333333
                                                                 ), .Dim = 2:1), out = c(343, 318, 299, 257), group = c(1, 
                                                                                                                        1, 1, 1), names = """"), list(stats = structure(c(7, 
                                                                                                                                                                                            12, 22.5, 44, 72), .Dim = c(5L, 1L)), n = 36, conf = structure(c(14.0733333333333, 
                                                                                                                                                                                                                                                             30.9266666666667), .Dim = 2:1), out = numeric(0), group = numeric(0), 
                                                                                                                                                                        names = ""), list(stats = structure(c(5, 
                                                                                                                                                                                                                                        5, 6, 12.5, 21), .Dim = c(5L, 1L)), n = 36, conf = structure(c(4.025, 
                                                                                                                                                                                                                                                                                                       7.975), .Dim = 2:1), out = numeric(0), group = numeric(0), 
                                                                                                                                                                                                                    names = ""))

非常感谢

我同意将 ggplot2 图形与多面体一起使用的想法,但鉴于您的绘图对象,您可以做这样的事情(让您开始)。我使用 ggplotify 而不是 cowplot 因为我 运行 遇到了数字边距的问题,但是您可以通过更改空设备(未测试)来解决这个问题。

编辑:

添加了单独的标签和 y 轴标签,以及外边距。您可能需要根据复合图的输出大小调整其中的一些内容。这可能会向您展示如何为各个地块调整这些设置。不过,使用 ggplot2 来生成绘图会使事情变得容易一些。

library(grid)
library(gridExtra)
library(ggplotify)
sdt <- list(list(stats = structure(c(43, 96.5, 297.5, 707.5, 778), .Dim = c(5L, 1L)), 
                 n = 36, conf = structure(c(136.603333333333, 458.396666666667), .Dim = 2:1), 
                 out = numeric(0), group = numeric(0), names = ""), 
            list(stats = structure(c(2, 10.5, 55.5, 102, 128), .Dim = c(5L, 1L)), 
                 n = 36, conf = structure(c(31.405, 79.595), .Dim = 2:1), 
                 out = numeric(0), group = numeric(0), names = ""), 
            list(stats = structure(c(1, 3, 5.5, 77, 88), .Dim = c(5L, 1L)), 
                 n = 36, conf = structure(c(-13.9866666666667, 24.9866666666667), .Dim = 2:1), 
                 out = numeric(0), group = numeric(0), names = ""), 
            list(stats = structure(c(531, 632.5, 701, 726.5, 786), .Dim = c(5L, 1L)), 
                 n = 36, conf = structure(c(676.246666666667, 725.753333333333), .Dim = 2:1),
                 out = c(485, 464, 446), group = c(1, 1, 1), names = ""), 
            list(stats = structure(c(104, 109.5, 113.5, 121, 125), .Dim = c(5L, 1L)), 
                 n = 36, conf = structure(c(110.471666666667, 116.528333333333), .Dim = 2:1), 
                 out = c(91, 91, 88, 84, 84, 79), group = c(1, 1, 1, 1, 1, 1), names = ""), 
            list(stats = structure(c(28, 53.5, 83.5, 88, 91), .Dim = c(5L, 1L)), 
                 n = 36, conf = structure(c(74.415, 92.585), .Dim = 2:1), 
                 out = numeric(0), group = numeric(0), names = ""), 
            list(stats = structure(c(80, 89, 102.5, 153, 236), .Dim = c(5L, 1L)), 
                 n = 36, conf = structure(c(85.6466666666667, 119.353333333333), .Dim = 2:1), 
                 out = c(343, 318, 299, 257), group = c(1,1, 1, 1), names = ""), 
            list(stats = structure(c(7, 12, 22.5, 44, 72), .Dim = c(5L, 1L)), 
                 n = 36, conf = structure(c(14.0733333333333, 30.9266666666667), .Dim = 2:1),
                 out = numeric(0), group = numeric(0), names = ""), 
            list(stats = structure(c(5, 5, 6, 12.5, 21), .Dim = c(5L, 1L)),
                 n = 36, conf = structure(c(4.025, 7.975), .Dim = 2:1), 
                 out = numeric(0), group = numeric(0), names = ""))
sublabels <- paste0(rep(LETTERS[1:3], each=3), 1:3)
gplts <- lapply(1:9, function(x) as.grob(function(y=sdt[[x]]) {
  par(oma=c(0,3,0,3))
  bxp(y, ylab="values", main=sublabels[x])}))
grid.arrange(rectGrob(gp=gpar(col="red")), rectGrob(gp=gpar(col="green")), 
             rectGrob(gp=gpar(col="yellow")), nrow=1, newpage =T)
vp <- viewport(.33/2,0.45, gp = gpar(col="red"))
grid.text("Group A",
          y = .1, just = c("center", "bottom"),
          gp = gpar(fontsize=20), vp = vp)
vp <- viewport(.5,.45, gp = gpar(col="green"))
grid.text("Group B",
          y = .1, just = c("center", "bottom"),
          gp = gpar(fontsize=20), vp = vp)

vp <- viewport(1-(.33/2),.45, gp = gpar(col="yellow"))
grid.text("Group C",
          y = .1, just = c("center", "bottom"),
          gp = gpar(fontsize=20), vp = vp)
grid.arrange(grobs=gplts, nrow=1, newpage=F)

reprex package (v1.0.0)

于 2021-03-25 创建