0

嗨有这个数据集:

tdat=structure(list(Condition = structure(c(1L, 3L, 2L, 1L, 3L, 2L, 
1L, 3L, 2L, 1L, 3L, 2L, 1L, 3L, 2L, 1L, 3L, 2L, 1L, 3L, 2L, 1L, 
3L, 2L, 1L, 3L, 2L), .Label = c("AS", "Dup", "MCH"), class = "factor"), 
    variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 3L, 3L), .Label = c("Bot", "Top", "All"), class = "factor"), 
    value = c(1.782726022, 1, 2.267946449, 1.095240234, 1, 1.103630141, 
    1.392545278, 1, 0.854984833, 4.5163067, 1, 4.649271897, 0.769428018, 
    1, 0.483117123, 0.363854608, 1, 0.195799358, 0.673186975, 
    1, 1.661568993, 1.174998373, 1, 1.095026419, 1.278455823, 
    1, 0.634152231)), .Names = c("Condition", "variable", "value"
), row.names = c(NA, -27L), class = "data.frame")

> head(tdat)
  Condition variable    value
1        AS      Bot 1.782726
2       MCH      Bot 1.000000
3       Dup      Bot 2.267946
4        AS      Bot 1.095240
5       MCH      Bot 1.000000
6       Dup      Bot 1.103630

我可以使用以下代码绘制它:

ggplot(tdat, aes(x=interaction(Condition,variable,drop=TRUE,sep='-'), y=value,
                 fill=Condition)) + 
                 geom_point() +
                 scale_color_discrete(name='interaction levels')+
        stat_summary(fun.y='mean', geom='bar',
                aes(label=signif(..y..,4),x=as.integer(interaction(Condition,variable))))

http://postimg.org/image/5fwdwuu5t/

我有 2 个问题:

  1. 如何更改叠加层,使条形​​图不隐藏黑点(每列应显示 3 个点)

  2. 如何使用黑点的标准偏差在条形顶部添加垂直误差条?

4

2 回答 2

4

我不太赞成将误差线与条形图混合。

在 ggplot2 中,几何图形是按照您将它们添加到绘图中的顺序绘制的。因此,为了不隐藏点,请将它们添加到条形之后。

ggplot(tdat, aes(x=interaction(Condition,variable,drop=TRUE,sep='-'), y=value,
                 fill=Condition)) +  
  stat_summary(fun.data="mean_sdl", mult=1, geom="errorbar") +
  stat_summary(fun.y='mean', geom='bar') + 
  geom_point(show_guide=FALSE) +
  scale_fill_discrete(name='interaction levels')

在此处输入图像描述

于 2013-07-26T18:39:04.540 回答
2

像这样:

tdat$x <- with(tdat,interaction(Condition,variable,drop=TRUE,sep='-'))
tdat_err <- ddply(tdat,.(x),
                  summarise,ymin = mean(value) - sd(value),
                            ymax = mean(value) + sd(value))

ggplot(tdat, aes(x=x, y=value)) + 
        stat_summary(fun.y='mean', geom='bar',
                aes(label=signif(..y..,4),fill=Condition)) + 
        geom_point() + 
        geom_errorbar(data = tdat_err,aes(x = x,ymin = ymin,ymax = ymax,y = NULL),width = 0.5) +
        labs(fill = 'Interaction Levels')

在此处输入图像描述

我已经稍微清理了你的代码。如果您将任何无关的计算移到 ggplot() 调用之外,您会遇到更少的问题。最好先创建新的 x 变量。这样一来,一切都更具可读性。

重叠问题只需要重新排序图层。

请注意,您在未scale_colour_*映射时正在使用(这是一个非常常见的错误)。fillcolour

唯一的另一个“技巧”是取消映射y. 通常,当事情变得棘手时,我会完全aes从顶层ggplot调用中省略,以确保每一层都只获得它需要的美感。

再次出现错误栏,我倾向于首先在 ggplot 之外创建数据框。我发现它更干净,更容易阅读。

于 2013-07-26T18:36:50.523 回答