[问题] Multiple ggplot2 plots on 1 page

楼主: luenchang (luen)   2023-06-13 15:22:54
[问题叙述]:
先谢谢上周h大回复关于如何画图的第2个x轴。之后我试着把code作延伸,改成给数据库
里的27个病人 (SUBJID) 每个人画一个图,并且在同一个页面排成3 x 9 (ncol=3,
nrow=9)的多图。目前我是把ggplot2的程式用for loop给每个病人生成一个plot object
,然后以他们的SUBJID 为字根将plot object命名,例如plot.017_306, plot.017_313,
plot.023_302。
我Google了几个网页及stackoverflow, 大部分多图排列是用类似以下的方法:
ridExtra::grid.arrange(plot.017_306, plot.017_313, plot.023_302, ncol=3,
nrow=1)
不过,因为plot objects 的数量多,我不想一个个地列出来。很有可能其他要绘图的数
据有更多的病人。
我接着用以下程式把所有 plot objects 放进一个list:
# Add all plot objects to a list
pattern.plot.objects <- "plot.\\d{3}_\\d{3}"
plot.list <- list(ls(pattern = pattern.plot.objects))
再想办法用这个list产生多图 :
ggpubr::ggarrange(plotlist = plot.list, ncol=3, nrow=1)
# In as_grob.default(plot) :
# Cannot convert object of class character into a grob.
cowplot::plot_grid(plotlist = plot.list, ncol=3, nrow=1)
# Warning message:
# In as_grob.default(plot) :
# Cannot convert object of class character into a grob.
gridExtra::grid.arrange(grobs= plot.list, ncol=3, nrow=1)
# Error in gList(...) : only 'grobs' allowed in "gList"
do.call(what = "grid.arrange", args = c(plot.list, ncol=3)) # Error in
gList(...) : only 'grobs' allowed in "gList"
以上每个code都产生error, 多图也没产生。我再用error message也是没找到有用的除错
程式。
不过,我不想用的方法
gridExtra::grid.arrange(plot.017_306, plot.017_313, plot.023_302, ncol=3,
nrow=1)
倒是有产生多图:
https://hackmd.io/_uploads/H1s90rHD2.png
另一个问题是,我也需要把legend放进图区里面,目前是放在图区外上方,legend内容量
大的图y轴会被挤压。不知道要如何将所有
图y轴的长度变为等长?
[程式范例]:
为了简化例子,我的程式只提供了3个病人的数据。程式贴在 Arrange multiple
ggplot2 plots on one page 这个部分,
网址为 https://hackmd.io/@Chang/adverse-events-gantt-chart
已经会ggplot2 多图的大大,先谢谢了。
楼主: luenchang (luen)   2023-06-13 17:17:00
我把list放到for loop里面,已经可以产生多图了。程式在hackmd note里已经更新。目前的问题变成美学方面的,例如如何缩减小图之间的间距。或是能将bars在y轴上的位置往底部移动
作者: hohiyan (海洋)   2023-06-14 01:17:00
可以说明一下要把多个不同subjid的图放在一起的目的吗?依目的的差异,用来呈现图表的方式也不同最简单的方法:既然变项都一样,那用 facet_wrap 就可以想要3x3的图,那就每次抓9个subjid出来跑之类的facet_warp(~ subjid, nrow=3, scale="free")如果目的是把跑出来的图可以一次放在一个档案给别人看那搭配 Quarto 或 RMarkdown,在排版上也会比较容易
作者: Gjerry   2023-06-18 15:31:00
也可以用 patchwork 来合并图

Links booklink

Contact Us: admin [ a t ] ucptt.com