如何解决当地块保存在列表中时,变量geom_text被覆盖
我正在尝试使用ggarrange
来组织几十个图,因此我设置了一个循环,在其中将每个图保存在列表中。每个图都有不同的数据,标题等,它们彼此不同。一切正常,直到我尝试使用geom_text
在图内放置一些文本。当将图保存在列表中时,每个图将从列表中的最后一个图继承geom_text
。我不知道如何避免这种情况。
my.list=vector("list",length = 2);
dt=data.table(x=c(1,100,100000),y=c(1,100000))
plotname=c('first','second')
for (i in 1:length(my.list)) {
my.list[[i]]=ggplot(data = dt,aes(x = x,y = y )) + geom_point(size=1.5,aes(color=c('red'))) + labs(x=NULL,y=NULL)
+ scale_color_manual(values='red')
+ theme_bw() + theme(panel.background = element_rect(fill='light grey',colour='black'),legend.position = "none")
+ geom_text(inherit.aes=FALSE,aes(x=500,y=100000,label=paste0('NRMSE:',i))) + ggtitle(paste0(plotname[i])) + coord_equal()
+ geom_abline(slope=1)
+ scale_y_log10(breaks = c(1,10,1000,10000,limits=c(1,100000))
+ scale_x_log10(breaks = c(1,1000000),100000))
+ labs(x=NULL,y=NULL)
+ theme_bw() + theme(panel.background = element_rect(fill='light grey',legend.position = "none")
}
在此之后我做
plotosave=ggarrange(plotlist=my.list)
解决方法
使用 lapply 代替 forloop 可以正常工作:
my.list <- lapply(1:2,function(i) {
ggplot(data = dt,aes(x = x,y = y )) +
geom_point(size=1.5) +
labs(x=NULL,y=NULL) +
theme_bw() +
theme(panel.background = element_rect(fill='light grey',colour='black'),legend.position = "none") +
geom_text(inherit.aes=FALSE,aes(x=50000,y=100000,label=paste0('NRMSE:',i))) +
ggtitle(paste0(plotname[i]))
})
ggarrange(plotlist = my.list)
注意:问题与 ggarrange 无关。
当您打印ggplot对象时,将构建该图。任何不属于所传递数据的内容都将在该时间点从封闭环境中获取。如果在绘图中使用for循环的迭代器,则迭代器将具有其最后一个值(或以后将其更改为任何值)。 lapply避免了该问题,因为其文档中的“注释”中说明了这些内容。
,问题是 ggplot()等到您打印打印图以解析 aes()命令中的变量。
我不确定为什么会发生 ,但是如果您从aes
中删除geom_text
会起作用。
library(ggplot2)
my.list = vector("list",length = 2)
dt = data.table::data.table(x=c(1,100,100000),y=c(1,100000))
plotname = c('first','second')
for (i in 1:length(my.list)) {
my.list[[i]]= ggplot(data = dt,y = y )) +
geom_point(size=1.5) +
labs(x=NULL,y=NULL) +
theme_bw() +
theme(panel.background = element_rect(fill='light grey',legend.position = "none") +
geom_text(x=50000,i)) +
ggtitle(paste0(plotname[i]))
}
plotosave = ggpubr::ggarrange(plotlist=my.list)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。