我有一条有两条直线的光谱图,我使用以下命令制作: (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)
我想做的是绘制橙色线直到3200赫兹和3200赫兹的天蓝线,如下图(粗略地由photoshop创建,对不起):
是否可以使用abline()函数?或者有没有办法做到这一点?
非常感谢!
答案 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")
这给出了
这是一种更灵活的方式来做你想做的事情,而不是手工写出方程,并且可以使用多种类型的模型,他们有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")