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

如何在R语言中将变量x生成的点添加至代码1生成的散点图并设置为红色

如何将变量x的红色点添加到现有散点图中?

没问题,我帮你调整代码,把代码2生成的红色点添加到代码1的散点图里。核心思路是先绘制原散点图,再用points()函数叠加红色的PV点,下面是完整的修改后代码:

library(dplyr)
library(tidyr)
library(lubridate)

data <- structure( list(Id=c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1), date1 = c("2021-06-20","2021-06-20","2021-06-20","2021-06-20","2021-06-20", "2021-06-20","2021-06-20","2021-06-20","2021-06-20","2021-06-20","2021-06-20", "2021-06-20","2021-06-20","2021-06-20","2021-06-20","2021-06-20","2021-06-20", "2021-06-20","2021-06-20","2021-06-20","2021-06-20"), date2 = c("2021-07-01","2021-07-01","2021-07-01","2021-07-01","2021-04-02", "2021-04-02","2021-04-02","2021-04-02","2021-04-02","2021-04-02","2021-04-03", "2021-04-03","2021-04-03","2021-04-03","2021-04-03","2021-04-08","2021-04-08", "2021-04-09","2021-04-09","2021-04-10","2021-04-10"), Week= c("Thursday","Thursday","Thursday","Thursday","Friday","Friday","Friday","Friday", "Friday","Friday","Saturday","Saturday","Saturday","Saturday","Saturday","Thursday", "Thursday","Friday","Friday","Saturday","Saturday"), DTPE = c("Ho","Ho","Ho","Ho","","","","","","","","","","","","","","","","Ho","Ho"), D1 = c(8,1,9, 3,5,4,7,6,3,8,2,3,4,6,7,8,4,2,6,2,3), DR01 = c(4,1,4,3,3,4,3,6,3,7,2,3,4,6,7,8,4,2,6,7,3), DR02 = c(8,1,4,3,3,4,1,6,3,7,2,3,4,6,7,8,4,2,6,2,3), DR03 = c(7,5,4,3,3,4,1,5,3,3,2,3,4,6,7,8,4,2,6,4,3), DR04= c(4,5,6,7,3,2,7,4,2,1,2,3,4,6,7,8,4,2,6,4,3),DR05 = c(9,5,4,3,3,2,1,5,3,7,2,3,4,7,7,8,4,2,6,4,3), DR06 = c(5,4,3,3,6,2,1,9,3,7,2,3,4,7,7,8,4,2,6,4,3)), class = "data.frame", row.names = c(NA, -21L))

graph <- function(dt, dta = data) {
  dim_data<-dim(data)
  day<-c(seq.Date(from = as.Date(data$date2[1]), by = "days", length = dim_data[1] ))
  data_grouped <- data %>% mutate(across(starts_with("date"), as.Date)) %>% group_by(date2) %>% summarise(Id = first(Id), date1 = first(date1), Week = first(Week), DTPE = first(DTPE), D1 = sum(D1)) %>% select(Id,date1,date2,Week,DTPE,D1)
  # 修复原代码的小问题:将DTPE空值转为NA的操作需要赋值生效
  data_grouped <- data_grouped %>% mutate(DTPE = na_if(DTPE, ""))
  df_OC<-subset(data_grouped, DTPE == "")
  ds_CO = df_OC %>% filter(weekdays(date2) %in% weekdays(as.Date(dt)))
  mean<-mean(ds_CO$D1)
  sd<-sd(ds_CO$D1)
  
  # 提取原散点图的数据,单独存储方便后续使用
  plot_data <- dta %>% 
    filter(date2 == 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 = "Number", 
       xlim = c(0, 45),
       cex=1.5, cex.lab=1.5, cex.axis=1.5, cex.main=2, cex.sub=2, 
       lwd=2.5, 
       ylim = c((min(plot_data$val) %/% 10) * 15, (max(plot_data$val) %/% 10 + 1) * 100))
  
  # 添加原有的水平线
  abline(h=mean, col='blue')
  abline(h=(mean + sd), col='green',lty=2)
  abline(h=(mean - sd), col='orange',lty=2)
  
  # 生成代码2中变量x对应的点数据(仅筛选当前dt日期的行)
  x_data <- dta %>%
    filter(date2 == ymd(dt)) %>%
    # 计算DR03到DR06的PV值:D1减去对应DR列的值
    mutate(across(starts_with("DR03"), ~ D1 - .x, .names = "{.col}_PV")) %>%
    select(DR03_PV:DR06_PV) %>%
    # 转成长格式,提取x轴的天数(3-6)和对应的PV值
    pivot_longer(everything(), names_pattern = "DR(.+)_PV", values_to = "pv_val") %>%
    mutate(name = as.numeric(name))
  
  # 叠加红色的PV点,用实心圆区分原散点
  points(x_data$name, x_data$pv_val, col = "red", cex = 1.5, pch = 16)
}

# 调用函数测试
graph("2021-04-09", data)

关键修改说明:

  • 修复了原代码中data_grouped处理DTPE空值时未赋值的小问题,确保后续筛选逻辑正常。
  • 将原散点图的数据单独存储为plot_data,让代码更清晰,也避免重复计算。
  • 在函数内部生成对应当前日期的PV点数据x_data,确保只处理和当前散点图匹配的日期数据。
  • 使用points()函数叠加红色实心点,参数cex=1.5和原散点大小一致,pch=16让红色点更醒目,方便和原黑色散点区分。

运行修改后的代码,你就能看到原散点图上叠加了红色的PV点啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 07:42:33