如何在R绘制的图表中插入按星期计算的均值与均值加标准差水平虚线
修改后可直接运行的完整代码
library(dplyr) library(tidyr) library(ggplot2) library(lubridate) df <- structure( list(date = c("2021-08-01","2021-08-01","2021-08-01","2021-08-01","2021-08-01", "2021-08-08","2021-08-08","2021-08-08","2021-08-08","2021-08-08","2021-08-08", "2021-08-13","2021-08-13","2021-08-13","2021-08-13","2021-08-13"), Week= c("Sunday","Sunday","Sunday","Sunday","Sunday","Sunday","Sunday","Sunday", "Sunday","Sunday","Sunday","Friday","Friday","Friday","Friday","Friday"), D1 = c(0,1,0,0,5,0,1,0,0,9,4,3,4,5,6,7), DR01 = c(2,1,0,0,3,0,1,0,1,7,2,3,4,6,7,8), DR02 = c(2,0,0,0,4,2,1,0,1,4,2,3,4,5,6,7), DR03 = c(2,0,0,2,6,2,0,0,1,5,2,2,4,5,7,5), DR04 = c(2,0,0,5,6,2,0,0,3,7,2,3,4,5,6,4), DR05 = c(2,0,0,5,6,2,0,0,7,7,2,3,4,5,6,7), DR06 = c(2,0,0,5,7,2,0,0,7,7,1,3,5,6,7,8), DR07 = c(2,0,0,6,9,2,0,0,7,8,1,3,5,6,4,3)), class = "data.frame", row.names = c(NA, -16L)) scatter_date <- function(dt, dta = df) { # 计算目标日期对应星期的D1总和统计量 target_week <- as.character(wday(ymd(dt), label = TRUE, abbr = FALSE)) week_stats <- dta %>% mutate(date = ymd(date)) %>% filter(Week == target_week) %>% group_by(date) %>% summarise(d1_total = sum(D1), .groups = "drop") %>% summarise( mean_val = mean(d1_total), sd_val = sd(d1_total) ) # 原有绘图逻辑 plot_data <- dta %>% mutate(date = ymd(date)) %>% filter(date == ymd(dt)) %>% summarize(across(starts_with("DR"), sum)) %>% pivot_longer(everything(), names_pattern = "DR(.+)", values_to = "val") %>% mutate(name = as.numeric(name)) plot(plot_data$name, plot_data$val, xlab = "Days", ylab = "Types", xlim = c(0, 7)) # 插入两条水平虚线 abline(h = week_stats$mean_val, lty = 2, col = "red") abline(h = week_stats$mean_val + week_stats$sd_val, lty = 2, col = "blue") # 可选:添加图例说明 legend("topright", legend = c(paste0("均值: ", round(week_stats$mean_val,2)), paste0("均值+标准差: ", round(week_stats$mean_val + week_stats$sd_val,2))), lty = 2, col = c("red", "blue"), bty = "n") } scatter_date("2021-08-01")
说明
- 代码完全匹配要求的计算规则:自动匹配输入日期对应的星期几,拉取所有同星期日期的D1列总和计算均值和标准差
- 调用
scatter_date("2021-08-01")时,会自动计算得到周日的均值为10、标准差为5.66,和给定的计算结果一致 - 可自行修改
col参数调整虚线颜色,lty参数调整线型,不需要图例可以直接删除对应代码段
内容的提问来源于stack exchange,提问作者Antonio
相关产品推荐
相关产品推荐

