R 使用ggplot在多个数据系列上添加错误条

R 使用ggplot在多个数据系列上添加错误条,r,ggplot2,R,Ggplot2,我有5次治疗(包括对照)的几个月的数据记录。我使用ggplot将数据绘制为时间序列,并生成了每个日期的原始数据平均值和标准误差的数据帧 我试图在同一张图上绘制所有五种处理方法,并用它显示错误条。我能打个电话。绘制一个治疗组,并显示误差条和b)。绘制所有五种处理方法,但不显示错误条 这是我的数据(我只包括了两种保持整洁的方法) c_mean_am=控制装置 c_se_am=控件的标准错误 T1_平均值_am=治疗1平均值 T1_se_am=处理1的标准误差 这是我实现上述选项a)的代码 这是

我有5次治疗(包括对照)的几个月的数据记录。我使用ggplot将数据绘制为时间序列,并生成了每个日期的原始数据平均值和标准误差的数据帧

我试图在同一张图上绘制所有五种处理方法,并用它显示错误条。我能打个电话。绘制一个治疗组,并显示误差条和b)。绘制所有五种处理方法,但不显示错误条

这是我的数据(我只包括了两种保持整洁的方法)

  • c_mean_am=控制装置
  • c_se_am=控件的标准错误
  • T1_平均值_am=治疗1平均值
  • T1_se_am=处理1的标准误差
这是我实现上述选项a)的代码

这是上面选项b)的代码


sp首先将数据转换为长格式:

df <- df %>% 
 gather(mean_type, mean_val, c_mean_am, T1_mean_am) %>% 
 gather(se_type, se_val, c_se_am, T1_se_am)


ggplot(df, aes(dates, mean_val, colour=mean_type)) + 
    geom_line() + 
    geom_point() + 
    geom_errorbar(aes(ymin=mean_val-se_val, ymax=mean_val+se_val))
对于长格式的数据,您可以使用新的标识符形式(“类型”)进行打印,例如:

ggplot(new.dat, aes(val, mpg, fill=type)) + 
   geom_col(position="dodge")

长格式也适用于在不同面绘制,例如

ggplot(new.dat, aes(val, mpg, colour=type)) + 
    geom_point() + 
    facet_wrap(~type) 

接受的答案似乎包含数据收集方式的错误(即
packageVersion(“tidyr”)>=1.0.0
)复制了每个点和错误条。错误条很明显,但是如果将
geom_point()
替换为
geom_jitter()
,您将看到对应于两个错误条的两个点。这给其他人带来了一些影响,所以我想为后代提供一个正确的解决方案

以下是另一种避免重复的方法:

#加载必要的包
图书馆(tidyverse)
#从问题中创建数据

谢谢你的迅速回复。我使用了您的代码,并得到以下错误消息“error:is.character(x)not TRUE”我做错了什么?data.frame的结构是什么?错误发生在哪一步:数据处理还是绘图?我对R很陌生,所以您可能需要指导我完成这一步。您所说的数据帧结构是什么意思?我基本上只是复制了你的代码,并在数据处理后将其放在右边,以生成绘图,然后得到错误。我需要安装“tidyr”和“devtools”软件包。对不起。我假设您知道
dplyr
tidyr
,因为您运行的是
ggplot2
。无论如何,只需执行
install.packages(“tidyverse”)
即可下载/安装所需的软件包,然后运行
library(tidyverse)
即可加载函数所需的软件包。至于结构,如果您要键入
str(df)
,您将得到每列的类摘要(例如
str(iris)
),因此我添加了包,但仍然得到相同的错误消息。我根本无法生成“df”来查找结构。我只是复制并粘贴了你的代码,直接跟在我的代码后面,我用两个数据系列来绘制图表。我使用的是我自己的流程数据的数据框架,这里的数据只是其中的一部分。我可以用Str。除日期列为日期外,所有列均为“num”。
df <- df %>% 
 gather(mean_type, mean_val, c_mean_am, T1_mean_am) %>% 
 gather(se_type, se_val, c_se_am, T1_se_am)


ggplot(df, aes(dates, mean_val, colour=mean_type)) + 
    geom_line() + 
    geom_point() + 
    geom_errorbar(aes(ymin=mean_val-se_val, ymax=mean_val+se_val))
new.dat <- mtcars %>%  # taking mtcars as the starting data.frame
        select(gear, cyl, mpg, qsec) %>% 
          # equivalent to mtcars[, c("gear", "cyl", "mpg", "qsec")]; to simplify the example
        gather(key=type, value=val, gear, cyl) %>% 
          # convert the data into a long form with 64 rows, with new factor column "type" and numeric column "val". "gear" and "cyl" are removed while "mpg" and "qsec" remain

new.dat[c(1:3, 33:35),]

#     mpg  qsec type val
# 1  21.0 16.46 gear   4
# 2  21.0 17.02 gear   4
# 3  22.8 18.61 gear   4
# 33 21.0 16.46  cyl   6
# 34 21.0 17.02  cyl   6
# 35 22.8 18.61  cyl   4
ggplot(new.dat, aes(val, mpg, fill=type)) + 
   geom_col(position="dodge")
ggplot(new.dat, aes(val, mpg, colour=type)) + 
    geom_point() + 
    facet_wrap(~type)