将x = y行添加到scatterplot

时间:2013-12-06 20:33:15

标签: r plot line scatter-plot

我正在使用car包中的scatterplot函数来生成散点图。 我希望能够在图中生成一个应该是x = y的参考线。 我尝试使用abline,它确实添加了一行,但它不是x = y行。有人可以帮忙吗?

我的代码如下:

scatterplot(phenos$P1~pheno$P0, data=pheno,spread=FALSE,ylab="6 month timepoint", xlab="Baseline Timepoint", jitter=list(x=1, y=1))
abline(0,1)

感谢。

3 个答案:

答案 0 :(得分:5)

您可以通过相同的功能abline实现目标。使用函数abline(a=0, b=1),其中ab分别是该行的截距和斜率。这会为您绘制Y = a + b*x形式的直线。

希望这会有所帮助。

答案 1 :(得分:3)

我只是使用segment函数: 段(X0 = 0,Y0 = 0时,X1 = 45,Y1 = 45)

只需使y值远远超过绘图的极限即可。

此功能也很不错,因为它不会更改x和y限制,因此线条可以在图形中清晰运行,而无需准确选取x和y值。

答案 2 :(得分:1)

这实际上相当困难/ hackish,因为scatterplot()内部使用layout,这使得很难控制图形驱动程序当前使用的子图。 (更新:它比我想象的更难 - 设置par("mfg")一定是偶然或多或少地工作。)

补充数据(更新:使用平均值x和y不等于零并且彼此不相等的数据,因为它说明了天真地使用abline()更加明显的困难)< / p>

set.seed(1)
d <- data.frame(x=rnorm(10,mean=10),y=rnorm(10,mean=12))
library(car)

尝试我的旧策略(实际上不起作用,或者只是不可预测地工作):

scatterplot(y~x,data=d,reset.par=FALSE)
k <- 1              
for (i in 1:2) {
   for (j in 1:2) {
      par(mfg=c(i,j,2,2))
        abline(0,1,lwd=3,col=k)
        k <- k+1
  }

}

根据我的工作方式,我会收到警告和错误或虚假答案。我是否在函数内进行scatterplot()调用似乎很重要...... ??

enter image description here

第二次尝试,更保守地:从头开始重建布局。

 scatterplot(y~x,data=d)
 uu <- par("usr")
 ## mimic layout frolm car:::scatterplot.default.  Would be different if we were drawing only one
 ## of x-boxes or y-boxes
 layout(matrix(c(1, 0, 3, 2), 2, 2), widths = c(5, 95), 
        heights = c(95, 5))
 oldmar <- par(mar=rep(0,4))  ## zero out margins so we can plot in sub-boxes without errors
 ## now skip through the first two sub-plots
 par(new=TRUE); plot.new(); par(new=TRUE); plot.new()
 par(oldmar)  ## reset margins
 ## blank plot with user limits set and 'interior' axis calculations
 plot(0:1,0:1,xlab="",ylab="",xlim=uu[1:2],ylim=uu[3:4],xaxs="i",yaxs="i")
 ## add annotation
 abline(a=0,b=1,col=4,lwd=3)              

enter image description here

考虑到此解决方案的工作量和脆弱性,实际上最好破解scatterplot以选择性地允许另外指定abline(),或者向维护者询问该能力......