【问题标题】:Plot mean and standard deviation by category按类别绘制均值和标准差
【发布时间】:2014-08-28 20:40:36
【问题描述】:

我正在尝试按因子的三个水平绘制带有均值和标准差的图。

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

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

我想用按类别的平均值及其 sd 条绘制一个图,就像 this one (edit: link broken)

我的数据框看起来像这样

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

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

【问题讨论】:

标签: r plot mean


【解决方案1】:

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

输出

【讨论】:

    【解决方案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") 和所有轴标记 (@987654327 @)。

    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 会自动将这些矩阵转换为向量并回收它们。 NAs 在那里,所以我们不会将一行的末尾连接到下一行的开头。 (尝试移除 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)
    

    【讨论】:

    • 非常感谢您的回答,非常好的一步一步的解释。正是我需要的。有没有办法在每一行添加经典的“扁平箭头”?
    • 我使用了函数“arrows”而不是“lines”,我这样做了:arrows(c(1,2,3), foo$mean.temp+foo$sd, c(1, 2,3), foo$mean.temp-foo$sd, 代码=3, 角度=90, 长度=0.05)。再次感谢您的好意和详细解释
    猜你喜欢
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 2017-08-30
    • 2019-07-24
    • 2017-04-01
    • 2012-07-17
    • 1970-01-01
    • 2020-11-21
    相关资源
    最近更新 更多