我正在为一家具有严格图形要求的期刊敲定一些 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)
您也可以使用 dplyr 尝试此解决方案。只需将此更改应用于 ggarrange 之前的绘图列表,而不是之后
library(dplyr)
lapply(list(.g(df), .g(df[1:10,])), function(x){x + reps}) %>%
ggarrange(plotlist = .)