如何解决在时间与变量图上绘制均值和 +/- sigma
我正在尝试创建数据的历史可视化,以逐月显示平均值和 +/- 1 西格玛线。目前,我已经根据数据创建了一个汇总表,然后使用 geom_segment 手动添加了每个均值和 + sigma(仅用于示例)。这不是很瘦。我尝试了 geom_smooth 或类似的函数,但我不知道如何对数据进行分组并相应地显示参考线。
非常感谢!
library(ggplot2)
library(lubridate)
library(tibble)
library(stringr)
library(dplyr)
dates <- as.Date(c("2021-01-01","2021-01-02","2021-01-04","2021-01-08","2021-01-12","2021-01-17","2021-01-21","2021-01-26","2021-01-29","2021-02-01","2021-02-02","2021-02-04","2021-02-08","2021-02-12","2021-02-17","2021-02-21","2021-02-26","2021-02-28","2021-03-01","2021-03-02","2021-03-04","2021-03-08","2021-03-12","2021-03-17","2021-03-21","2021-03-26","2021-03-29"))
all_values <- c(sample(15:25,9,replace=FALSE),sample(18:27,sample(10:25,replace=FALSE))
full_table <- tibble(dates,all_values)
summary_values <- full_table %>%
mutate(Month_Category = format(dates,"%Y-%m" )) %>%
group_by(Month_Category) %>%
summarise(mean_values = mean(all_values),sd_top = mean(all_values) + sd(all_values),sd_bot = mean(all_values)- sd (all_values)) %>%
ungroup()
History_graph <- full_table %>%
ggplot(aes(x = dates,y = all_values)) +
geom_point() +
labs(title = "History",x = "Date",y = "values") +
theme_bw() +
theme(plot.title = element_text(hjust = 0.5)) +
theme(axis.text.x = element_text(angle=45,hjust=1,size = 12),axis.title = element_text(size=12)) +
theme(axis.text.y = element_text(size=12),axis.title = element_text(size=12)) +
scale_y_continuous(breaks = seq(5,30,by=5),limits=c(5,30)) +
scale_x_date(breaks = '3 days',labels=date_format('%d-%b'),expand = c(0,0)) +
geom_segment(aes(x = as.Date("2021-01-01"),xend=as.Date("2021-01-31"),y=summary_values$mean_values[1],yend = summary_values$mean_values[1])) +
geom_segment(aes(x = as.Date("2021-02-01"),xend=as.Date("2021-02-28"),y=summary_values$mean_values[2],yend = summary_values$mean_values[2])) +
geom_segment(aes(x = as.Date("2021-03-01"),xend=as.Date("2021-03-31"),y=summary_values$mean_values[3],yend = summary_values$mean_values[3])) +
geom_segment(aes(x = as.Date("2021-01-01"),y=summary_values$sd_top[1],yend = summary_values$sd_top[1])) +
geom_segment(aes(x = as.Date("2021-02-01"),y=summary_values$sd_top[2],yend = summary_values$sd_top[2])) +
geom_segment(aes(x = as.Date("2021-03-01"),y=summary_values$sd_top[3],yend = summary_values$sd_top[3]))
History_graph
解决方法
我找到了这个问题的答案。 一种替代方法是使用 mutate 创建均值和 +/- 1 sd 值,然后简单地为不同的值添加 geom_line 并按类别分组。比以前的方法简单得多。
亲切的问候
full_table <- tibble(dates,all_values) %>%
mutate(Month_Category = format(dates,"%Y-%m" )) %>%
group_by(Month_Category) %>%
mutate(mean_values = mean(all_values)) %>%
mutate(sd_top = mean(all_values) + sd(all_values)) %>%
mutate(sd_bot = mean(all_values)- sd (all_values)) %>%
ungroup()
History_graph <- full_table %>%
ggplot(aes(x = dates,y = all_values)) +
geom_point() +
labs(title = "History",x = "Date",y = "values") +
theme_bw() +
theme(plot.title = element_text(hjust = 0.5)) +
theme(axis.text.x = element_text(angle=45,hjust=1,size = 12),axis.title = element_text(size=12)) +
theme(axis.text.y = element_text(size=12),axis.title = element_text(size=12)) +
scale_y_continuous(breaks = seq(5,30,by=5),limits=c(5,30)) +
scale_x_date(breaks = '3 days',labels=date_format('%d-%b'),expand = c(0,0)) +
geom_line(aes(y = mean_values,group = Month_Category),color = "black") +
geom_line(aes(y = sd_top,color = "gray") +
geom_line(aes(y = sd_bot,color = "gray")
History_graph
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。