r - 如何填充ggplot图中两条曲线之间的间隙
问题描述
我想对数据拟合一个简单的三次多项式,然后用三种不同的几何图形构建一个图:我拟合模型的数据点集(geom_point
蓝色),对这些点的拟合+预测区间(geom_line
,也蓝色)和模型拟合后几天的预测(geom_line
,红色)。这是我的代码:
library(ggplot2)
positives <- c(13, 65, 118, 229, 322, 455, 655, 888, 1128, 1577)
days_passed <- length(positives)
t <- seq(1, days_passed)
t_full <- c(t, seq(t[days_passed], 30))
model <- lm(positives ~ poly(t,degree=3))
predict_positives <- predict(model, list(t = t_full), interval = "prediction")
# plot
length(positives) <- length(t_full)
dframe <- data.frame(day = t_full,
positives = positives,
future = ifelse(t_full <= days_passed, "N", "Y"),
lwr = predict_positives[, "lwr"],
fit = predict_positives[, "fit"],
upr = predict_positives[, "upr"])
p <- ggplot(dframe, aes(x = day, y = positives, color = future)) +
geom_point() +
geom_line(aes(y = fit)) +
geom_line(aes(y = lwr), linetype = "dashed") +
geom_line(aes(y = upr), linetype = "dashed") +
geom_vline(xintercept = 17, linetype = "dashed") +
geom_vline(xintercept = 24)
print(p)
然而,结果图显示了一个不美观的差距:
如何修改我的代码以使拟合和预测是连续的?
解决方案
您的future
列具有N
对应于第 10 天的两行的值。如果您只是更改它,该图将显示您的意图。
dframe$future[11] <- "Y"
ggplot(dframe, aes(x = day, y = positives, color = future)) +
geom_point() +
geom_line(aes(y = fit)) +
geom_line(aes(y = lwr), linetype = "dashed") +
geom_line(aes(y = upr), linetype = "dashed") +
geom_vline(xintercept = 17, linetype = "dashed") +
geom_vline(xintercept = 24)
推荐阅读
- amazon-web-services - AWS Lambda 非常缓慢地耗尽 SQS 队列
- python - Python 使用 timedeltas 求和不能正常工作,不能转换标量
- c++ - 是否可以将 ASCII 控制字符存储在字符串中?
- r - 如何将数据框中的对象重新定义为数字?
- python - 根据单元格中的文本字符拆分数据框的列
- java - Java 使用带有非静态方法的“this”
- python - 使用 LogisticRegression 时,“GridSearchCV”对象没有属性“best_params_”
- c# - System.Type 中是否有获取此类型定义的运算符的方法?
- javascript - 基于多个时间戳作为二级索引的 RethinkDB 查询
- ios - UITableViewDataSource 无法识别 cellForRowAt indexPath