r - 在ggplot中为特定时间段添加两条单独的趋势线
问题描述
块引用
嗨,
我正在尝试为特定时间段(日期)绘制两条单独的趋势线,但没有成功。有人可以建议最好的方法是什么吗?第一行从 11/14 到 12/26,第二行从 1/2 到结束。我想在下面实现的结果。先感谢您!
我使用
日期值的数据框
11/14/2020 18.57
11/21/2020 19.62
11/28/2020 21.81
12/5/2020 21.24
12/12/2020 22.32 12/19/2020
20.79
12/26/2020 21.18
1 /2/2021 21.38
1/9/2021 21.22
1/16/2021 20.45
1/23/2021 19.11
1/30/2021 20.74
ggplot(sns1, aes(x = date, y = metric_value)) + geom_line(size = 1, color = "#E41A1C")
解决方案
如果您不愿意考虑两种趋势的截止日期部分,您可以geom_smooth()
通过指定组在单个语句中完成。
library(ggplot2)
txt <- "date value
11/14/2020 18.57
11/21/2020 19.62
11/28/2020 21.81
12/5/2020 21.24
12/12/2020 22.32
12/19/2020 20.79
12/26/2020 21.18
1/2/2021 21.38
1/9/2021 21.22
1/16/2021 20.45
1/23/2021 19.11
1/30/2021 20.74"
sns1 <- read.table(text = txt, sep = " ", header = TRUE)
sns1$date <- as.Date(sns1$date, format = "%m/%d/%Y")
cutoff <- as.Date("2020/12/26")
ggplot(sns1, aes(date, value)) +
geom_line() +
geom_smooth(aes(group = date >= cutoff),
method = "lm")
#> `geom_smooth()` using formula 'y ~ x'
由reprex 包(v1.0.0)于 2021-06-25 创建
推荐阅读
- python - 使用 ElementTree (python) 解析 xml 文件时出错
- apiary.io - Dredd - 如何根据 http 状态码修改测试结果?
- c# - 将线程用于非常小的操作会更好,还是总是首选任务?
- swift - SKEmitterNode如何倒带时间?
- java - 如何从另一个类访问片段类中呈现的 TextView 和进度条
- javascript - 如何防止在java脚本上重新刷新页面?
- go - 包的 `init()` 函数中的无限循环 - 好主意还是坏主意?
- ios - Fastlane 扫描在当前测试会话未完成时启动新的测试会话
- java - 我可以在多个地方使用相同的片段吗?
- mysql - 是什么降低了这个产品搜索 MySQL 查询的速度?