【问题标题】:Insert mean into a scatter plot in R将平均值插入R中的散点图中
【发布时间】:2021-08-26 18:34:36
【问题描述】:

我将在下面插入两个代码,第一个代码生成一个散点图,其中考虑了我数据库中选择的日期 (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 中。因此,例如,如果我选择 2021 年 10 月 4 日,它将生成一个散点图,但它也会插入我提到的两条线(平均值和平均值+标准差)对应于所选的一周中的一天,在这种情况下是星期六。如果我选择 2021 年 9 月 4 日这一天,它将生成散点图和星期五的线条。

感谢您的帮助!

非常感谢!

Muito obrigado!

第一个代码

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)

二码

 #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

数据库

【问题讨论】:

    标签: r


    【解决方案1】:

    在创建绘图之前,您应该首先使用第二个代码计算平均值和标准差。一旦你有了这两个数字,你就可以将它们传递给你的第一个代码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 函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-22
      • 1970-01-01
      • 2018-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多