使用R在循环中创建散点图,并将回归线添加到绘图中

时间:2017-07-21 21:29:12

标签: r plot regression

我正在根据数据文件第一列中的每个唯一值创建一个散点图。散点图正在创建中,但我想为每个图形添加回归线。根据我目前的方法,我只在其中一个图表上接收回归线(coat.pdf)。该回归线也只是y = 1并且不遵循数据。我希望每个图表上的回归线适合数据。我希望能够以更加面向对象的方式使用R,例如" plot.addregression"因为应用这些松散的功能,我觉得我不太清楚它的访问内容。

rates = read.csv("file.txt")
for(i in unique(rates[,1])){
        dev.new()
        freq = unlist(rates[2])
        temp = unlist(rates[3])
        fMatch = freq[rates[1] == toString(i)]
        tMatch = temp[rates[1] == toString(i)]
        plot(fMatch,tMatch)#,xlab="freq",ylab="temp")
        abline(lm(fMatch~tMatch), col="red")
        file.rename("Rplots.pdf", paste(i,".pdf",sep=""))
        dev.off()
}

file.txt的

clothing,freq,temp
coat,0.3,10
coat,0.9,0
coat,0.1,20
hat,0.5,20
hat,0.3,15
hat,0.1,5
scarf,0.4,30
scarf,0.2,20
scarf,0.1,10

1 个答案:

答案 0 :(得分:1)

您的代码存在一些问题。

  1. dev.new()会打开一个设备,但它不一定是pdf设备:如果这是您想要的,那么明确打开该设备会更好。

  2. unlist(rates[2])可能适用于这种情况,但不是从数据框中提取列的常用方法。 rates[[2]]rates[,2]更常见。但是,甚至不需要提取列:使用data参数plotlm代替。

  3. 您的子集错误。我不确定它会做什么,但几乎肯定不是你想要的。最好将您在data参数中使用的数据框进行子集化。

  4. plot有两种常见形式:plot(x, y)plot(y ~ x)。您似乎使用了plot(y, x)来交换轴。只有plot(y ~ x)表单适用于data参数,因此我会使用它。它也与lm()一致,这是另一个优势。

  5. paste0(...)paste(..., sep="")的便捷简写。

  6. 所以这里的翻译可能会做你想要的:

    rates = read.csv("file.txt")
    for(i in unique(rates[,1])){
      pdf(file = paste0(i, ".pdf"))
      match <- rates[rates[,1] == i, ]
      plot(freq ~ temp, data = match)#,xlab="freq",ylab="temp")
      abline(lm(freq ~ temp, data = match), col="red")
      dev.off()
    }