[问题叙述]:
先谢谢上周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 多图的大大,先谢谢了。