我想自动生成几百个散点图,但是用一种紧凑的方法来处理子集并没有取得太大的成功。数据框具有三个感兴趣的字段:

site           code            value

1              x                30
1              y                14
1              z                12
2              x                35
2              y                19

等等,

其中site =数字,value =数字,code =分组变量。

大约有400个站点和300个代码。

我想要的是:
  • 基于字段= d的df
  • 图x =站点vs y =值,作为散点图
  • 将每个散点图写入.pdf的单独页面中
  • 自动化过程

  • 任何意见表示赞赏。例如,这种方法产生的错误“子集”必须评估为逻辑。 lapply调用可能也不起作用。
    dfarray<-list(subset(df,df[,2]))
    pdf(file="test.pdf")
    figures<-lapply(dfarray, function(i) {(plot(i$[,1],i$[,3]))
    })
    dev.off()
    

    非常感谢

    合并d_ply效果很好。我对这个结果感到满意,但是谁能指出X,Y轴的label语句有什么不对吗? (注意:此代码块每个子集导致1 pdf)
    names(df)<-tolower(names(df))
    names(df)
    d_ply(df,"code",function(x){
    pdf(file=paste(unique(x$code),".pdf"))
    plot(data=x,value~site, xlab=names(x[1]),ylab=as.name(x$code))
    dev.off()
    })
    

    更新:假设存在数据帧df,下面是此代码的两个有效版本。这将每个组的散点图写入单独的.pdf:
    names(df)<-tolower(names(df)
    names(df)
    d_ply(df,"code",function(x){
    pdf(file=paste(unique(x$code),".pdf"))
    plot(data=x, value~site, xlab=names(df[1]),ylab=unique(x$code))
    dev.off()
    })
    

    这将所有散点图(每组一个)写入一个.pdf:
    names(df)<-tolower(names(df)
    names(df)
    pdf(file="df_all.pdf")
    d_ply( df, "code", function(x) {
    plot(data=x, value~site, xlab=names(df[1]), ylab=unique(x$code))
    })
    dev.off()
    

    最佳答案

    我会使用plyr::d_ply:

    library(plyr)
    pdf(file="test.pdf")
    d_ply( df.1, "code", function(x) plot( data = x, value~site, main = unique(x$code) ) )
    dev.off()
    

    您可能需要阅读有关split-apply-(combine) strategy的一般信息。

    10-06 13:43
    查看更多