在 R中将平均值插入散点图

我将在下面插入两个代码,第一个生成一个散点图,其中考虑了我的数据库中的所选日期 (date2)。下载数据库的链接是:https://docs.google.com/spreadsheets/d/1W_hzuRq7D6X12BdwaXeM-cjg2A5MIKDx/edit?usp=sharing&ouid=102073768617937039119&rtpof=true&sd=true。无论如何,我将在此消息的末尾插入我的数据库映像。

我将在下面插入两个代码,第一个生成一个散点图,其中考虑了我的数据库中的所选日期 (date2)。下载数据库的链接是:https://docs.google.com/spreadsheets/d/1W_hzuRq7D6X12BdwaXeM-cjg2A5MIKDx/edit?usp=sharing&ouid=102073768617937039119&rtpof=true&sd=true。无论如何,我将在此消息的末尾插入我的数据库映像。

第二个代码用于计算同一数据库的平均值和标准偏差。在这种情况下,它们考虑了星期几(Week)。您将在代码 2 中看到,为了计算平均值和标准偏差,我输入了i,因此如果 i = 3,则表示星期六。

但是,我想在我的散点图中插入两条水平线:一条均值和另一条均值 + 标准差,即在代码 1 中。因此,如果我选择例如 10 / 4 / 2021,它将生成一个散点图,但它也会插入我提到的两条线(平均值和均值 + 标准差)对应于一周中选择的日子,在这种情况下是星期六。如果我选择 09 / 04 / 2021 的日子和星期五散点图。

我感谢任何帮助!

非常感谢你!

Muito obrigado!

First code
library(dplyr)
library(ggplot2)
library(tidyr)
library(lubridate)
df<-read_excel('C:/Users/Downloads/database_test.xlsx')
#create scatter plot
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))
}  
scatter_date("2021-04-10",df)

enter image description here

秒代码

 #calculation of mean and standard deviation
df<-subset(df,df$date2<df$date1) 
dim_data<-dim(df)
day<-c(seq.Date(from = as.Date(df$date2[1]),
                to = as.Date(df$date2[dim_data[1]]),
                by = "1 day"))
df_grouped<-matrix(nrow = 9,ncol=6)
colnames(df_grouped)<-c("Id","date1","date2","Week","D","D1")
df_grouped <- df %>%
  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)) %>% 
  select(Id,date1,date2,Week,D,D1)
df_grouped <- df_grouped %>% mutate(date1=format(date1,"%d/%m/%Y"),
                                    date2=format(date2,"%d/%m/%Y"))
df_grouped<-data.frame(df_grouped)
DS=c("Thursday","Friday","Saturday") 
i<-3 
df_OC<-subset(df_grouped,is.na(D)) 
ds_OC<-subset(df_OC,df_OC$Week==DS[i])
mean_Week<-mean(as.numeric(ds_OC[,"D1"]) )
mean_Week
[1] 19
sdeviation_Week<-sd(as.numeric(ds_OC[,"D1"]))
sdeviation_Week
[1] 7.071068

Database enter image description here

0

在创建图之前,您应该首先使用第二个代码计算平均值和标准偏差。一旦有了这两个数字,就可以将它们传递给第一个代码scatter_date(您需要函数的新参数)。在scatter_date中,您还需要计算y范围。

然后,在scatter_date中,您可以调用abline函数来绘制水平线。

df <- data.frame(days = c(1, 2, 3, 4, 5), types = c(14, 15, 14, 16, 14))
mean_week <- 19
sd_week <- 7.07
y_max <- max(c(df$types, mean_week + sd_week))
y_min <- min(c(df$types, mean_week - sd_week))
plot(df, xlim = c(0, 7), ylim = c(y_min, y_max)) +
  abline(h=mean_week, col='blue') +
  abline(h=(mean_week + sd_week), col='green') +
  abline(h=(mean_week - sd_week), col='green')
  

注意:我已经使用了plot,因为您的代码使用它。但我也看到您加载了ggplot2库。我会鼓励你使用ggplot来创建你的图,而不是基本的plot函数。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(959)
调用 vs调用函数
上一篇
Nexus中的 Log4j新版本和旧版本
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(11条)