使用R,我想繪製兩個變量之間的線性關係,但我希望擬合線只出現在數據範圍內。例如,如果我有以下代碼,我希望行只能以1:10的x和y值存在(使用默認參數,此行超出數據點範圍)。在一定範圍內繪製擬合線R
x <- 1:10
y <- 1:10
plot(x,y)
abline(lm(y~x))
使用R,我想繪製兩個變量之間的線性關係,但我希望擬合線只出現在數據範圍內。例如,如果我有以下代碼,我希望行只能以1:10的x和y值存在(使用默認參數,此行超出數據點範圍)。在一定範圍內繪製擬合線R
x <- 1:10
y <- 1:10
plot(x,y)
abline(lm(y~x))
代替使用abline()
的,(a)中保存的擬合模型,(b)中使用predict.lm()
找到對應於x = 1和擬合的y值x = 10,且然後(c)中使用lines()
到在兩點之間添加一條線:
f <- lm(y~x)
X <- c(1, 10)
Y <- predict(f, newdata=data.frame(x=X))
plot(x,y)
lines(x=X, y=Y)
您可以使用預測來執行此操作。 (?見預測)
您可以在x的具體數值預測
x<-1:10
y<-1:10
plot(x,y)
new <- data.frame(x = seq(1, 5, 0.5))
lines(new$x, predict(lm(y~x), new))
除了使用predict
與lines
或segments
您還可以使用clip
功能與abline
:
x <- 1:10
y <- 1:10
plot(x,y)
clip(1,10, -100, 100)
abline(lm(y~x))
plotrix l ibrary具有用於只是這個ablineclip()
功能:
x <- 1:10
y <- 1:10
plot(x,y)
ablineclip(lm(y~x),x1=1,x2=5)
一種替代方法是使用segments
功能(文件here)。
說你估計了這條線,你得到了a
的截距和b
的斜率。因此,您的功能是y = a + bx
。
現在,假設您想要顯示x0
和x1
之間的x線。然後,下面的代碼繪製您行:
# inputs
a <- 0.5
b <- 2
x0 <- 1
x1 <- 5
# graph
plot(c(0,5), c(0,5), type = "n", xlab = "", ylab = "", bty='l')
segments(x0, a+b*x0, x1, a+b*x1)
只要與你的選擇的取代a, b, x0, x1
值。
對於那些像我這樣誰來到這個問題想繪製線中任意一對數字(而不是那些符合給定的迴歸),下面的代碼是你所需要的:
plot(c(0,5), c(0,5), type = "n", xlab = "", ylab = "", bty='l')
segments(x0, yo, x1, y1)
只要與你的選擇的取代x0, y0, x1, y1
值。
+1,因爲它可以與任何行一起使用,也可以使用abline(),而不使用predict()方法。這樣,人們可以(例如)修剪延伸到繪圖邊緣的線條,但僅限於一邊,例如,向右,而不是向左。 – pfifas 2015-01-27 12:40:07