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

时间:2014-07-08 07:42:58

标签: r plot mean

我试图通过三个级别的因子绘制一个简单的平均值和sd barrs的情节。 在互联网上搜索了两个小时,然后查看Rbook和Rgraphs书,我仍然没有找到答案。我认为这是因为这是一个非常简单的问题......而且我还不太了解R的工作方式。

我有一个包含三列的简单数据框:my categories,mean,sd。

我想用类别和它的sd barrs做一个情节,就像 this one

我的数据框看起来像这样

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

我很抱歉提出这个愚蠢的问题,但我真的无法找到我这个简单问题的简单答案。

非常感谢你,(我也很感谢有关R图的基本文献的任何建议。)

2 个答案:

答案 0 :(得分:11)

使用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()

<强>输出

enter image description here

答案 1 :(得分:2)

创建一个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

相关问题