绘制方法,错误,然后背景中的原始数据 - 更简单的代码?

col*_*lin 4 plot r

我想绘制连续变量的均值和标准误差,按照分类中的一个进行分组R.然后我想在后台获得生成该均值和标准误的实际原始数据点.结果图将如下所示:

在此输入图像描述

我自己编写了这个,但它需要多个自定义函数(用于生成标准错误,组方法),以及向数据框添加一些内容以生成抖动并绕过一些图形打嗝.代码将复制到此处并生成所有必需的数据:

##generate some fake data###
ctrl<- rnorm(20,1,0.5)
treated<- rnorm(20,2,0.5)
ctrl.lab<- rep('ctrl',20)
treated.lab<- rep('treated',20)
#adding 1s and 2s that correspond to treatment for plotting later. The niormal distribution allows me to jitter the points along the y-axis
ctrl.alt<- rnorm(20,1,0.02) 
treated.alt<- rnorm(20,2,0.02)
alt<-c(ctrl.alt,treated.alt) later
lab<-c(ctrl.lab,treated.lab)
response<- c(ctrl,treated)

data<-data.frame(lab,response,alt)

#make a function for plotting error bars
errb <- function (x, y, ebl, ebu = ebl, length = 0.06, ...){
  arrows(x, y + ebu, x, y - ebl, angle = 90, code = 3,
  length = length, ...)
  }
#make a function that will grab a data frame, and kick back means and standard errors by a grouping variable. 
meanerr<- function(data,param,grouping){
    means<-aggregate(param~grouping,data=data,FUN=mean)
    sd<-aggregate(param~grouping,data=data,FUN=sd)
    count<-aggregate(param~grouping,data=data,FUN=length)
    err<-sd$param/sqrt(count$param)
    output<-cbind(means,err)
    return(output)
}  

d3<-meanerr(data,data$response,data$lab)
d3$alt<-c(1,2) #for plotting. 
limx<-c(0.6,2.4) #set x limits
limy<-c(0,3.1) #set y limits

#start with plotting the jittered raw data points. 
plot(data$alt,data$response,
    pch=16,
    xaxt='n',
    ylab=NA,
    xlab='',
    xlim=limx,
    ylim=limy,
    col='light gray')
par(new=T)
#now add the mean and standard error
plot(d3$alt,d3$param,
    pch=16,
    xaxt='n',
    ylab=NA,
    xlab='',
    cex=2,
    xlim=limx,
    ylim=limy,
    col='black')
    axis(1,at=1:2, labels=d3$grouping,cex.axis=1.4)
    mtext('response',2,cex=1,line=2)
    errb(d3$alt,d3$param,d3$err,col='black',cex=2)
Run Code Online (Sandbox Code Playgroud)

这是制作一个数字的大量代码!有没有更简单的方法 - 没有cstom函数,或使用ggplot?

eip*_*i10 5

您可以使用更少的代码执行此操作ggplot2:

library(ggplot2)

ggplot(data, aes(lab, response)) +
  geom_point(alpha=0.3, position=position_jitter(height=0, width=0.05)) +
  stat_summary(fun.data=mean_cl_normal, geom="errorbar", 
               width=0.03, colour="red", alpha=0.7, conf.int=.683) +
  stat_summary(fun.y=mean, geom="point", fill="red", pch=21, size=3) 
Run Code Online (Sandbox Code Playgroud)

(根据@Roland评论更新:一个标准误差相当于68.3%的置信区间.)

在此输入图像描述