如何在限制区域绘制直线?

时间:2012-11-14 23:08:18

标签: r line

我有一条有两条直线的光谱图,我使用以下命令制作: (a是光谱左边的斜率,右边是b。边界是3200 Hz)

a=0.009909
b=-0.003873

plot(spec, type="l", main...)

abline(a, col="orange")
abline(b, col="skyblue")
abline(v=3200, lty=2)

enter image description here

我想做的是绘制橙色线直到3200赫兹和3200赫兹的天蓝线,如下图(粗略地由photoshop创建,对不起):

enter image description here

是否可以使用abline()函数?或者有没有办法做到这一点?

非常感谢!

2 个答案:

答案 0 :(得分:2)

如果你有拟合的模型,那么最好的解决方案是使用predict()方法在感兴趣的区间内为一组等间隔点生成预测。

使用@thelatemail答案中的数据

df <- data.frame(y = c(1.4, 2.3, 3.8, 3.6, 5.9, 5.4, 7.6, 7.4, 8.1,
                       8.7, 7.4, 6.9, 5.4, 4.7, 2.7, 1.8, 1.1),
                 x = 1:17,
                 ind = rep(c(TRUE,FALSE), times = c(8,9)))

fit1 <- lm(y ~ x, data = df, subset = ind)
fit2 <- lm(y ~ x, data = df, subset = !ind)

## regions in a new data frame over which to predict
r1 <- data.frame(x = seq(from = 1, to = 8, length.out = 20))
r2 <- data.frame(x = seq(from = 9, to = 17, length.out = 20))

## predict
p1 <- predict(fit1, newdata = r1)
p2 <- predict(fit2, newdata = r2)

## add lines to plot
plot(y ~ x, data = df, type = "l")
lines(p1 ~ x, data = r1, col = "red")
lines(p2 ~ x, data = r2, col = "blue")

这给出了

enter image description here

这是一种更灵活的方式来做你想做的事情,而不是手工写出方程,并且可以使用多种类型的模型,他们有predict()方法。

答案 1 :(得分:1)

编辑

以修复错误

这是一个应该可扩展到您的数据的基本示例。它依赖于首先使用glm生成最适合每个数据子集的行的系数,然后在lines语句中调用它们。

test <- c(1.4, 2.3, 3.8, 3.6, 5.9, 5.4, 7.6, 7.4, 8.1, 8.7, 7.4, 6.9, 
5.4, 4.7, 2.7, 1.8, 1.1)

plot(test,type="l",ylim=c(0,12))
fit1 <- glm(test[1:8] ~ I(1:8))
fit2 <- glm(test[9:17] ~ I(1:9))

# ...$coefficients[2] is the slope, ...$coefficients[1] is the intercept
lines(1:9, 1:9 * fit1$coefficients[2] + fit1$coefficients[1],col="red")
lines(9:17,1:9 * fit2$coefficients[2] + fit2$coefficients[1],col="blue")

enter image description here