【问题标题】:Creating scatter plots in a loop with R, and adding regression lines to the plot使用 R 在循环中创建散点图,并向图中添加回归线
【发布时间】:2017-12-28 01:18:49
【问题描述】:

我正在根据数据文件第一列中的每个唯一值创建散点图。散点图创建得很好,但我想为这些图中的每一个添加一条回归线。使用我目前的方法,我仅在其中一个图表(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()
}

文件.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

【问题讨论】:

    标签: r plot regression


    【解决方案1】:

    您的代码存在一些问题。

    1. dev.new() 打开一个设备,但它不一定是 pdf 设备:如果你想要的话,最好明确地打开那个设备。

    2. unlist(rates[2]) 在这种情况下可能会起作用,但这不是从数据框中提取列的常用方法。 rates[[2]]rates[,2] 更常见。但是甚至不需要提取列:改为使用 plotlmdata 参数。

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

    4. plot 有两种常用形式:plot(x, y)plot(y ~ x)。您似乎使用了plot(y, x),它将交换轴。只有plot(y ~ x) 表单与data 参数一起使用,所以我会使用它。也与lm()一致,另一个优势。

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

    所以这里的翻译可能是你想要的:

    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()
    }
    

    【讨论】:

    • 谢谢,当我在绘图函数中更改 fMatch 和 tMatch 时,它就可以工作了。我的子集错误是什么意思?
    • rates[1] 是一个包含第一列汇率的数据框。 rates[1] == toString(i) 是(我认为)一个包含逻辑值的矩阵。我不会指望通过矩阵索引freqtemp。可能它有效,但这不是正常的事情。按逻辑值向量索引是正常的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 2013-05-05
    • 2021-04-01
    • 1970-01-01
    相关资源
    最近更新 更多