微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

标记绘图组

如何解决标记绘图组

我将九个图合并在一起,我想根据不同的特征(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),conf = structure(c(31.405,79.595),list(stats = structure(c(1,3,5.5,77,88),conf = structure(c(-13.9866666666667,24.9866666666667
                                                           ),list(stats = structure(c(531,632.5,701,726.5,786),conf = structure(c(676.246666666667,725.753333333333
                                                                     ),out = c(485,464,446),group = c(1,1,1
                                                                     ),list(stats = structure(c(104,109.5,113.5,121,125),conf = structure(c(110.471666666667,116.528333333333),out = c(91,91,88,84,79),1),list(stats = structure(c(28,53.5,83.5,91),conf = structure(c(74.415,92.585),list(stats = structure(c(80,89,102.5,153,236),conf = structure(c(85.6466666666667,119.353333333333
                                                                 ),out = c(343,318,299,257),names = """"),list(stats = structure(c(7,12,22.5,44,72),conf = structure(c(14.0733333333333,30.9266666666667),list(stats = structure(c(5,5,6,12.5,21),conf = structure(c(4.025,7.975),names = ""))

非常感谢

enter image description here

解决方法

我同意使用带有面的 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),conf = structure(c(31.405,79.595),list(stats = structure(c(1,3,5.5,77,88),conf = structure(c(-13.9866666666667,24.9866666666667),list(stats = structure(c(531,632.5,701,726.5,786),conf = structure(c(676.246666666667,725.753333333333),out = c(485,464,446),group = c(1,1,1),list(stats = structure(c(104,109.5,113.5,121,125),conf = structure(c(110.471666666667,116.528333333333),out = c(91,91,88,84,79),list(stats = structure(c(28,53.5,83.5,91),conf = structure(c(74.415,92.585),list(stats = structure(c(80,89,102.5,153,236),conf = structure(c(85.6466666666667,119.353333333333),out = c(343,318,299,257),list(stats = structure(c(7,12,22.5,44,72),conf = structure(c(14.0733333333333,30.9266666666667),list(stats = structure(c(5,5,6,12.5,21),conf = structure(c(4.025,7.975),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))
  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",vp = vp)

vp <- viewport(1-(.33/2),gp = gpar(col="yellow"))
grid.text("Group C",vp = vp)
grid.arrange(grobs=gplts,newpage=F)

reprex package (v1.0.0) 于 2021 年 3 月 25 日创建

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。