用列循环ggplot2

时间:2012-07-18 17:55:27

标签: r ggplot2

我试图循环数据框和列以生成多个图。我有一个数据框列表,对于每个数据框,我想绘制对几个预测变量之一的响应。

例如,我可以轻松地循环数据框:

df1=data.frame(response=rpois(10,1),value1=rpois(10,1),value2=rpois(10,1))
df2=data.frame(response=rpois(10,1),value1=rpois(10,1),value2=rpois(10,1))

#Looping across data frames
lapply(list(df1,df2), function(i) ggplot(i,aes(y=response,x=value1))+geom_point())

但是我在数据框中的列之间循环有问题:

lapply(list("value1","value2"), function(i) ggplot(df1,aes_string(x=i,y=response))+geom_point())

我怀疑它与我对待美学的方式有关。

最终,我希望将lapply串在一起,以生成数据框和列的所有组合。

感谢任何帮助!


编辑:Joran有它!在使用aes_string

时,必须将非列表响应放在引号中
lapply(list("value1","value2"), function(i) ggplot(df1,aes_string(x=i,y="response"))+geom_point())

作为参考,这里是串联lapply函数以生成所有组合:

lapply(list(df1,df2), function(x)
  lapply(list("value1","value2"), function(i) ggplot(x,aes_string(x=i,y="response"))+geom_point() ) )

1 个答案:

答案 0 :(得分:7)

aes_string()内,所有变量都需要表示为character。在“回复”周围添加引号。

lapply(list("value1","value2"), 
       function(i) ggplot(df1, aes_string(x=i, y="response")) + geom_point())