You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言散点图中添加对应所选日期星期的均值与标准差水平线

R代码实现方案

我们先预计算所有目标星期的均值、标准差,再修改散点绘图函数自动匹配对应日期的星期数值,添加水平线即可,完整可运行代码如下:

# 加载所需包
library(dplyr)
library(ggplot2)
library(tidyr)
library(lubridate)
library(readxl)

# 1. 读入原始数据
df <- read_excel('C:/Users/Downloads/database_test.xlsx')

# 2. 预计算各目标星期的均值、标准差(复用原有统计逻辑)
df_clean <- df %>%
  filter(date2 < date1) %>% # 保留date2小于date1的记录
  mutate(across(starts_with("date"), as.Date)) %>% 
  group_by(date2) %>% 
  summarise(
    Id = first(Id),
    date1 = first(date1),
    Week = first(Week),
    D = first(D),
    D1 = sum(D1)
  ) %>%
  ungroup() %>%
  filter(is.na(D)) # 保留D为空的记录

# 按星期分组计算统计值
week_stats <- df_clean %>%
  group_by(Week) %>%
  summarise(
    mean_week = mean(as.numeric(D1), na.rm = T),
    sd_week = sd(as.numeric(D1), na.rm = T),
    mean_plus_sd = mean_week + sd_week
  )

# 3. 修改后的散点绘图函数
scatter_date <- function(dt, dta = df, stats = week_stats) {
  # 转换输入日期格式,匹配对应星期的统计值
  target_date <- ymd(dt)
  target_week <- df_clean$Week[df_clean$date2 == target_date]
  target_stats <- stats[stats$Week == target_week, ]
  
  # 原有散点数据处理逻辑
  plot_data <- dta %>%
    filter(date2 == target_date) %>%
    summarize(across(starts_with("DR"), sum)) %>%
    pivot_longer(everything(), names_pattern = "DR(.+)", values_to = "val") %>%
    mutate(name = as.numeric(name))
  
  # 绘制散点图,调整y轴范围避免水平线超出显示
  plot(plot_data$name, plot_data$val, 
       xlab = "Days", ylab = "Types", 
       xlim = c(0, 7), ylim = c(0, max(plot_data$val, target_stats$mean_plus_sd) + 2))
  
  # 添加两条水平线,可自行调整颜色、线型
  abline(h = target_stats$mean_week, col = "red", lwd = 2, lty = 2) # 均值线:红色虚线
  abline(h = target_stats$mean_plus_sd, col = "blue", lwd = 2, lty = 2) # 均值+标准差线:蓝色虚线
  
  # 可选添加图例
  legend("topright", 
         legend = c(paste0(target_week, "均值:", round(target_stats$mean_week, 2)), 
                    paste0(target_week, "均值+标准差:", round(target_stats$mean_plus_sd, 2))),
         col = c("red", "blue"), lty = 2, lwd = 2)
}

# 测试调用
scatter_date("2021-04-10")

修改说明

  • 提前预计算了所有符合条件的星期对应的统计值,不用每次调用绘图函数重复计算,运行效率更高
  • 绘图函数新增了日期自动匹配星期的逻辑,传入指定日期后会自动拉取对应的均值、标准差,不需要手动指定星期参数
  • 你可以根据自身需求调整水平线的颜色、线型、是否显示图例等样式参数

内容的提问来源于stack exchange,提问作者Antonio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 10:09:01