调整R中图形中的线条 [英] Adjust line in graph in R

查看:11
本文介绍了调整R中图形中的线条的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下图基于date2生成散点图。此外,还会生成一条表示平均值的水平线。如您所见,一周中的每一天都有不同的含义。

请注意,在abline中我指定了h=mean_saturday,因为10/4是星期六。但我不想总是更改页眉的这一部分来显示正确的中值线,但我的想法是自动保留它,即当我在代码中输入日期10/4/2021年时,代码已经识别出10日是星期六并插入适当的中值线。你知道怎么做吗?

library(dplyr)
library(ggplot2)
library(tidyr)
library(lubridate)
library(tibble)
df <- 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-07-20","2021-07-20","2021-07-20","2021-07-20","2021-07-20",
                 "2021-07-20","2021-07-20","2021-07-20","2021-07-20","2021-07-20","2021-07-20",
                 "2021-07-20","2021-07-20","2021-07-20","2021-07-20","2021-07-20","2021-07-20",
                 "2021-07-20","2021-07-20","2021-07-20","2021-07-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"),
       D = c("","","Ho","","","","","","Ho","","","","","","","","","","","",""), 
       DR01 = c(2,1,4,3,3,4,1,6,3,7,2,3,4,6,7,8,4,2,6,2,3)),
  class = "data.frame", row.names = c(NA, -21L))

mean_thursday=4
mean_friday=5
mean_saturday=6


scatter_date <- function(dt, dta = df) {
  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(xlab = "Days", ylab = "Types", xlim = c(0, 7),
         ylim = c((min(.$val) %/% 10) * 10, (max(.$val) %/% 10 + 1) * 15))
  abline(h=mean_saturday, col='blue') 
}  
scatter_date("2021-04-10",df)

推荐答案

您可以尝试将scatter_date函数中的输入日期转换为日期并获得工作日:my_day <- weekdays(as.Date(dt))将其添加到您的均值的Switch语句中:

my_mean <- switch(
  my_day,
  "Saturday" = mean_saturday,
  "Friday" = mean_friday,
  "Thursday" = mean_thursday,
  0) # add here your other days

并将abline(h=mean_saturday, col='blue')中的mean_saturday替换为my_mean

这里是完整的代码:

library(dplyr)
library(ggplot2)
library(tidyr)
library(lubridate)
library(tibble)
df <- 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-07-20","2021-07-20","2021-07-20","2021-07-20","2021-07-20",
                 "2021-07-20","2021-07-20","2021-07-20","2021-07-20","2021-07-20","2021-07-20",
                 "2021-07-20","2021-07-20","2021-07-20","2021-07-20","2021-07-20","2021-07-20",
                 "2021-07-20","2021-07-20","2021-07-20","2021-07-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"),
       D = c("","","Ho","","","","","","Ho","","","","","","","","","","","",""), 
       DR01 = c(2,1,4,3,3,4,1,6,3,7,2,3,4,6,7,8,4,2,6,2,3)),
  class = "data.frame", row.names = c(NA, -21L))

mean_thursday=4
mean_friday=5
mean_saturday=6


scatter_date <- function(dt, dta = df) {
  
  my_day <- weekdays(as.Date(dt))
  
  my_mean <- switch(
    my_day,
    "Saturday" = mean_saturday,
    "Friday" = mean_friday,
    "Thursday" = mean_thursday,
    0) # add here your other days
  
  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(xlab = "Days", ylab = "Types", xlim = c(0, 7), main = paste0(my_day, ":", my_mean),
         ylim = c((min(.$val) %/% 10) * 10, (max(.$val) %/% 10 + 1) * 15))
  abline(h=my_mean, col='blue') 
}  
# testing the different means
scatter_date("2021-04-10",df)
scatter_date("2021-04-9",df)
scatter_date("2021-04-8",df)

这篇关于调整R中图形中的线条的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆