我正在根据数据文件第一列中的每个唯一值创建一个散点图。散点图正在创建中,但我想为每个图形添加回归线。根据我目前的方法,我只在其中一个图表上接收回归线(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
答案 0 :(得分:1)
您的代码存在一些问题。
dev.new()
会打开一个设备,但它不一定是pdf设备:如果这是您想要的,那么明确打开该设备会更好。
unlist(rates[2])
可能适用于这种情况,但不是从数据框中提取列的常用方法。 rates[[2]]
或rates[,2]
更常见。但是,甚至不需要提取列:使用data
参数plot
和lm
代替。
您的子集错误。我不确定它会做什么,但几乎肯定不是你想要的。最好将您在data
参数中使用的数据框进行子集化。
plot
有两种常见形式:plot(x, y)
或plot(y ~ x)
。您似乎使用了plot(y, x)
来交换轴。只有plot(y ~ x)
表单适用于data
参数,因此我会使用它。它也与lm()
一致,这是另一个优势。
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()
}