gpt4 book ai didi

r - 将 x=y 线添加到散点图

转载 作者:行者123 更新时间:2023-12-04 02:12:31 24 4
gpt4 key购买 nike

我正在使用 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)

谢谢。

最佳答案

这实际上相当困难/骇人听闻,因为 scatterplot()内部使用 layout ,这使得控制图形驱动程序当前使用的子图变得困难。 ( 更新 :这比我想象的要难 - 设置 par("mfg") 肯定或多或少是偶然的。)

补数据( 更新 :使用均值 x 和 y 不等于零且互不相等的数据,因为它更清楚地说明了天真使用 abline() 的困难)

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()额外指定,或要求维护者提供该功能......

关于r - 将 x=y 线添加到散点图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20433063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com