按类别绘制平均值和标准差

12

我正试图制作一个有三个因素水平的均值和标准差条形图。

(在经过两个小时的互联网搜索后,我查看了Rbook和Rgraphs书籍,但仍然找不到答案。我认为这是因为这是一个非常简单的问题。)

我有一个简单的数据框,包含三列:我的类别、均值和标准差。

我想画一个按类别分组的均值和其标准差的图,就像这个(编辑:链接已损坏)

我的数据框长这样:

  color     mean.temp      sd        
  black     37.93431      2.267125        
  red       37.01423      1.852052        
  orange    36.61345      1.339032

非常抱歉问这个愚蠢的问题,但我真的找不到任何简单的答案来回答我的简单问题。


1
也许这可以帮助你(如果你不介意使用ggplot2):http://www.cookbook-r.com/Graphs/Plotting_means_and_error_bars_(ggplot2)/ - erc
2个回答

19

使用 ggplot:

读取数据:

df=read.table(text=' color mean.temp   sd
1 black 37.93431 2.267125

2 red 37.01423 1.852052

3 orange 36.61345 1.339032',header=TRUE)

制图:

 ggplot(df, aes(x=color, y=mean.temp)) + 
     geom_errorbar(aes(ymin=mean.temp-sd, ymax=mean.temp+sd), width=.2) +
     geom_line() +
    geom_point()

输出

在这里输入图像描述


7
创建一个data.frame来保存你的数据:
foo <- data.frame(color=c("black","red","orange"),
    mean.temp=c(37.93431,37.01423,36.61345),
    sd=c(2.267125,1.852052,1.339032))

现在,我们首先将平均值绘制为点,确保我们在水平方向(xlim)和垂直方向(ylim)有足够的空间,抑制x轴标注(xaxt="n")和所有轴标签(xlab="", ylab="")。
plot(1:3,foo$mean.temp,pch=19,xlab="",ylab="",xaxt="n",xlim=c(0.5,3.5),
    ylim=c(min(foo$mean.temp-foo$sd),max((foo$mean.temp+foo$sd))))

接下来,我们将标准偏差绘制为线条。您也可以使用三个单独的lines命令,这可能更易于阅读。这样,我们首先通过rbind()将数据收集到矩阵中。R将自动将这些矩阵转换为向量并进行循环使用。 NA存在是为了避免将一条线的末尾连接到下一条线的开头。(尝试删除NA以查看发生了什么。)
lines(rbind(1:3,1:3,NA),rbind(foo$mean.temp-foo$sd,foo$mean.temp+foo$sd,NA))

最后,为x轴做注释:

axis(side=1,at=1:3,labels=foo$color)

means with sds


非常感谢您的回答,您提供了优秀的逐步解释,正是我所需要的。是否有一种方法可以在每行中添加经典的“扁平箭头”? - Maria
1
我使用了函数“arrows”而不是“lines”,并且这样做:arrows(c(1,2,3), foo$mean.temp+foo$sd, c(1,2,3), foo$mean.temp-foo$sd, code=3, angle=90, length=0.05)。再次感谢您的友善和详细解释。 - Maria

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接