R 通过循环中的点绘制直线

R 通过循环中的点绘制直线,r,R,我正试图通过一个图上的点画一条线。每个小区都是一条染色体。x轴是样本ID,y轴是一个样本和样本17之间的相关性。我所要做的就是在这些点之间画一条线性趋势线。然而,当我使用下面的abline时,我得到了下面的错误,我不知道如何纠正它。我已将abline移动到代码的正确位,但没有分辨率> #Get the data as display it df <- read.delim("~/Desktop/SequencingScripts/Plots/blabla.txt", header=TR

我正试图通过一个图上的点画一条线。每个小区都是一条染色体。x轴是样本ID,y轴是一个样本和样本17之间的相关性。我所要做的就是在这些点之间画一条线性趋势线。然而,当我使用下面的abline时,我得到了下面的错误,我不知道如何纠正它。我已将abline移动到代码的正确位,但没有分辨率>

 #Get the data as display it
 df <- read.delim("~/Desktop/SequencingScripts/Plots/blabla.txt", header=TRUE)
 df[,order(names(df))]
 ind = unique(as.character(df$chr))
 for(jj in ind){
  indic = which(df$chr == jj)
  plot(i, corrie, xlim=c(0,22), ylim=c(0.7,1), pch=19, type="s", xlab="sample", ylab="r",     main=jj)
  for(i in 3:16) {
corrie = (cor(df[,i][indic], df[,15][indic]))
points(i,corrie)
 }
abline(lm(corrie ~ i))
}


Error in int_abline(a = a, b = b, h = h, v = v, untf = untf, ...) : 
  'a' and 'b' must be finite


这是一种盲目的解决问题的尝试,因为您没有给出任何示例数据。我的建议是,在开始打印之前格式化要打印的数据

在您的示例中,您希望使用for loop over
i
计算相关性。因此,您可以在这个循环中执行此操作,并将所有相关性保存在data.frame中。当您收集了进入绘图的所有数据后,您可以通过在新data.frame上调用
plot
abline
来绘制这些数据

您可以对所有染色体重复此操作(循环
jj
)。您可以添加一条线,将打印保存到该循环中的单独位置

for(jj in ind){
  indic <- which(df$chr == jj)

  plot.df <- data.frame()
  for(i in 3:16) {
    corrie <- (cor(df[,i][indic], df[,15][indic]))
    plot.df <- rbind(plot.df, c(i, corrie))
  }
  colnames(plot.df) <- c("sample", "cor")

  plot(cor ~ sample, data=plot.df, xlim=c(0,22), ylim=c(0.7,1), pch=19,
       type="p", xlab="sample", ylab="r", main=jj)
  abline(lm(cor ~ sample, data=plot.df))
}
for(ind中的jj){

如果你包含尽可能小的可复制的示例,那就更好了。也就是说,代码行数最少,我们可以复制并粘贴它,然后它就会运行。你甚至可以自己这样发现问题。好的。只需从ind=unique(as.character(df$chr))运行即可我觉得您的代码似乎有问题。在使用它的循环之外使用了一个对象
i
。请尝试将
plot
调用移动到for循环中。您使用
abline
调用的问题是
corrie
i
是单个值。此线性模型无法估计,因此
abline
抱怨。嗨,Simon G。这里有两个for循环。所以我将绘图调用移动到for中(3:16中的I in 1),但我得到了错误:xy中的错误。coords(x,y,xlabel,ylabel,log):找不到对象“corrie”OK谢谢Simon G。当我输入示例数据时,您已将其与上面的数据进行了排序。干杯
for(jj in ind){
  indic <- which(df$chr == jj)

  plot.df <- data.frame()
  for(i in 3:16) {
    corrie <- (cor(df[,i][indic], df[,15][indic]))
    plot.df <- rbind(plot.df, c(i, corrie))
  }
  colnames(plot.df) <- c("sample", "cor")

  plot(cor ~ sample, data=plot.df, xlim=c(0,22), ylim=c(0.7,1), pch=19,
       type="p", xlab="sample", ylab="r", main=jj)
  abline(lm(cor ~ sample, data=plot.df))
}