通过循环中的点绘制abline

时间:2014-08-16 09:02:01

标签: r

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

enter image description here

 #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

示例数据:

 chr         column3     column4      column5  etc..
 chr9      14.44324324  11.66666667 14.13333333 
 chr9      22.93333333  7.20000000  9.13333333  
 chr9      15.60000000  5.86666667  5.73333333  
 chr10     3.06666667   8.46666667  1.80000000  
 chr12     10.333333        12.133333   7.000000    
 chr18    4.60000000    5.66666667  8.40000000  
 chr9      16.33333333  13.20000000 19.86666667 
 chr9      3.66666667   10.73333333 17.73333333 
 chr9      15.06666667  11.80000000 14.200000   
chr2      7.800000      10.933333   7.066667

1 个答案:

答案 0 :(得分:0)

这是一个盲目的尝试解决您的问题,因为您没有提供任何示例数据。我的建议是在开始绘图之前格式化要绘制的数据。

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

这可以重复所有染色体(环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))
}