[問題] Multiple ggplot2 plots on 1 page

看板R_Language作者 (luen)時間1年前 (2023/06/13 15:22), 編輯推噓2(2010)
留言12則, 3人參與, 1年前最新討論串1/1
[問題敘述]: 先謝謝上週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 多圖的大大,先謝謝了。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.182.204.157 (澳大利亞) ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1686640976.A.A58.html

06/13 17:17, 1年前 , 1F
我把list放到for loop裡面,已經可以產生多圖了。程式
06/13 17:17, 1F

06/13 17:17, 1年前 , 2F
在hackmd note裡已經更新。目前的問題變成美學方面的
06/13 17:17, 2F

06/13 17:17, 1年前 , 3F
,例如如何縮減小圖之間的間距。
06/13 17:17, 3F

06/13 17:21, 1年前 , 4F
或是能將bars在y軸上的位置往底部移動
06/13 17:21, 4F

06/14 01:17, 1年前 , 5F
可以說明一下要把多個不同subjid的圖放在一起的目的嗎?
06/14 01:17, 5F

06/14 01:18, 1年前 , 6F
依目的的差異,用來呈現圖表的方式也不同
06/14 01:18, 6F

06/14 01:19, 1年前 , 7F
最簡單的方法:既然變項都一樣,那用 facet_wrap 就可以
06/14 01:19, 7F

06/14 01:20, 1年前 , 8F
想要3x3的圖,那就每次抓9個subjid出來跑之類的
06/14 01:20, 8F

06/14 01:22, 1年前 , 9F
facet_warp(~ subjid, nrow=3, scale="free")
06/14 01:22, 9F

06/14 01:23, 1年前 , 10F
如果目的是把跑出來的圖可以一次放在一個檔案給別人看
06/14 01:23, 10F

06/14 01:24, 1年前 , 11F
那搭配 Quarto 或 RMarkdown,在排版上也會比較容易
06/14 01:24, 11F

06/18 15:31, 1年前 , 12F
也可以用 patchwork 來合併圖
06/18 15:31, 12F
文章代碼(AID): #1aY1bGfO (R_Language)
文章代碼(AID): #1aY1bGfO (R_Language)