R 在循环中更改标题

R 在循环中更改标题,r,loops,ggplot2,R,Loops,Ggplot2,我想根据一个变量的值对我的数据集进行子集划分,并绘制一个ggplot,该变量的值作为绘图的名称和ggtitle,并保存每个绘图 最后,我想把所有的图表合并成一个页面 这里是一个简化的例子 y=rnorm(100,0,1) x=样品(100,5,替换=T) k=5 z=样品(k,100,替换=T) z您的子集设置不正确:您使用了字符串'i'而不是变量i 对于循环和网格,您可以简单地使用面而不是。排列: dat=data.frame(y=y,x=x,z=z) ggplot(dat,aes(x=x,y

我想根据一个变量的值对我的数据集进行子集划分,并绘制一个ggplot,该变量的值作为绘图的名称和ggtitle,并保存每个绘图

最后,我想把所有的图表合并成一个页面

这里是一个简化的例子

y=rnorm(100,0,1)
x=样品(100,5,替换=T)
k=5
z=样品(k,100,替换=T)

z您的子集设置不正确:您使用了字符串
'i'
而不是变量
i

对于
循环和
网格,您可以简单地使用面而不是
。排列

dat=data.frame(y=y,x=x,z=z)
ggplot(dat,aes(x=x,y=y))+
几何点()
面_包裹(~z)
如果要循环和排列,需要使用列表:


plots您可以使用for循环,也可以使用组合lappy/do.call使循环更短更快

myplots = lapply(seq_len(k), function(i){
    p <- ggplot(data.frame(dat[dat$z==i,]), aes(x=x, y=y)) +
        geom_point() +
        ggtitle(i)
    ggsave(paste0(i,'.png'),p)        # if you want to save each plot
    return(p)
})
do.call(grid.arrange, myplots) 
或者单独执行此操作(例如,在回路/搭接层内部);
dat[dat$z==i',]
应该是
dat[dat$z==i,]
才能让代码正常工作。为什么在循环中将绘图指定给
i
?这令人困惑。无论如何,您的整个代码都可以被添加facet的一行调用所取代:)哦,我刚刚意识到您正试图用
I实现什么,是的,对于这个示例,这是可行的,但在我的原始代码中,每个子集的图都略有不同。因此,很难一次生成图形。@Stata_user如果它们不是相同的图形,我不确定在循环中创建它们是否有意义。你将得到
if(i==“red”){…}或者if(i==“green”){…}
这是一个完全反模式。谢谢@antoine sac。我做了这样的事。它现在好像在工作。不,对不起,还是不行。正如我前面提到的,我不能将所有的结果合并到一个数据帧中。我需要一个。第二部分。操作数据(此处未显示),然后仅操作3。图表我最大的问题是把值标签作为每个图表的标题。很抱歉,你的问题不清楚。如果不能将其中的所有数据放在一个数据帧中,您希望如何将其子集化?是否要列出适当的数据帧(并替换seq_len(k))?是否要在绘图函数中添加if语句?如果所有图形都不同,为什么要使用循环?也许这会帮助你:。答案还显示了如何按照您的要求将值标签作为ggtitle。我编辑了我的答案。
names(myplots) = seq_len(k)
list2env(myplots)
assign('blue',myplots[[1]])