同时对所有 ggarrange 子图应用相同的修改

问题描述 投票:0回答:1

我正在为一家具有严格图形要求的期刊敲定一些 ggplot 图形。
例如,我必须确保文本大小小于 7pt,并且我定义了以下变量,我可以将其添加到任何 ggplot 中:

reqs <- theme(axis.text = element_text(size=5, family='sans'), text=element_text(size=7,family='sans'))

我正在考虑通过编写一个

ggsave_reqs
函数来进一步概括这一点,该函数将所需的更改应用于简单的 ggplots 或 ggarrange 对象。
根据
?ggarrange
,此类中的元素要么是 ggplots,要么是 ggplots 列表,因此我尝试使用以下方法自动化“suplot 更改”:
lapply(ggarr, function(gg) gg + reqs )

但是,这不起作用,我遇到了错误:

“无法将 ggproto 对象添加在一起。您是否忘记将此对象添加到 ggplot 对象?”

有人知道是否可以自动化这些 ggarrange 子图修改吗?

一个最小的工作示例如下:

library(ggplot2)
library(ggpubr)

df <- data.frame(X=runif(1000, 0,1),
                 Y=runif(1000, 2,3),
                 CLASS=as.factor(rbinom(1000, size=1, p=.5)))

.g <- function(DF)
{
    ggplot(DF, aes(x=X, y=Y,color=CLASS)) +
    geom_point()
}

ggarr <- ggarrange( .g(df), .g(df[1:10,]))
reqs <- theme(legend.position='bottom') 

# none of these works
ggarr + reqs
lapply(ggarr, function(p){ p + reqs } )

# however this works
ggarr <- ggarrange( .g(df) + reqs, .g(df[1:10,]) + reqs)
r ggplot2 plot ggpubr
1个回答
0
投票

您也可以使用 dplyr 尝试此解决方案。只需将此更改应用于 ggarrange 之前的绘图列表,而不是之后

library(dplyr)
lapply(list(.g(df), .g(df[1:10,])), function(x){x + reps}) %>% 
  ggarrange(plotlist = .)
© www.soinside.com 2019 - 2024. All rights reserved.