我有两条直线构成的频谱曲线,这是我用下面的命令制备:(a是从频谱的左侧部分的斜率,b中的右侧的边界是3200赫兹这里)。
a=0.009909
b=-0.003873
plot(spec, type="l", main...)
abline(a, col="orange")
abline(b, col="skyblue")
abline(v=3200, lty=2)
我想这样做是绘制橙色线,直到3200赫兹和3200赫兹像下面的图(由Photoshop中,遗憾大致创建)天蓝色线:
是与功能abline()可能吗? 或者是有没有办法做到这一点?
非常感谢你!
编辑,以修复错误
这是一个基本的例子,应该是扩展到您的数据。 它依赖于首先使用生成数据的每个子集的最佳拟合线的系数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")
如果你有拟合模型,那么最好的解决办法是使用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")
这使
这是做你想要比写出来的手工式的东西更灵活的方式,并与许多类型的模型,他们有一个工作的predict()
方法。