wt1 <- cobs(x, y, constraint= "increase", lambda = 1, pointwise = con)
二次B样条曲线的制作
plot(wt1)
工作正常
但是如果我使用ggplot2,下面的错误消息就会出现
错误:
data
必须是数据框或fortify()
强制的其他对象,而不是具有类cobs的S3对象
因此,我使用predict(wt1)
从cobs中提取数据,但它只包含特定点(x,y),而不包含样条曲线。
如何使用cobs包生成的样条平滑线制作ggplot2对象?
发布于 2019-03-19 20:08:43
你在问题中做了一个错误的陈述,predict
不返回点x
和y
,它返回一个两列的矩阵,拟合值在第二列。
我将使用在help('cobs')
的第一个示例中创建的数据。
library(cobs)
set.seed(1234) # Make the results reproducible
x <- seq(-1, 3, , 150)
y <- (f.true <- pnorm(2*x)) + rnorm(150)/10
con <- rbind(c( 1,min(x),0), # f(min(x)) >= 0
c(-1,max(x),1), # f(max(x)) <= 1
c(0, 0, 0.5))# f(0) = 0.5
现在获取拟合的值,并将x
、y
和fit
放在一个数据帧中,这样ggplot
就不会抱怨了。
wt1 <- cobs(x,y, constraint= "increase", lambda = 1, pointwise = con)
fit <- predict(wt1, x)[, 'fit']
df1 <- data.frame(x, y, fit)
ggplot(df1, aes(x, y)) +
geom_point() +
geom_line(aes(y = fit), colour = 'red')
https://stackoverflow.com/questions/55243647
复制相似问题