ggplot,带错误条的条形图:两个二进制列和一个分类

时间:2017-01-26 21:18:23

标签: r ggplot2 bar-chart categorical-data errorbar

亲爱的Stackoverflow成员,

我有一个由以下内容组成的数据集:一列lang包含五种不同的语言。另外两列CANINT包含(0,1)。您可以看到数据here

我想为每种语言绘制两个条形图,一个用于CAN== 0,另一个用于CAN==1。 y轴应为INT(或INT==1)的行数。我希望这些条形图上有误差条。有些帖子建议使用melt()将格式转换为长格式。但是,由于我的数据是连续的,因此无法正常工作。

1 个答案:

答案 0 :(得分:1)

<强>更新

我昨晚看了stat_summary,也许它有效,但我做不到。所以我仍然认为geom_errorbar是最先建议的方式。

首先,计算CI我写了一个函数。可能有一个内置,但我不知道。

BinCI <- function(x) {
     p <- mean(x)
     s <- sqrt(p * (1 - p) / length(x))
     i <- s * 2
     i
}

其次是数据操作:

df2 <- unite(df, uLang, c(Lang, CAN), remove = FALSE) %>%  # Create the groups
     group_by(Lang, uLang) %>%
     summarize(prop = mean(INT), ci = BinCI(INT))  # Calculate the mean and CI using the `BinCI` function


Lang  uLang       prop         ci
Ar    Ar_0    0.07200000   0.04623972
Ar    Ar_1    0.44406780   0.05785682
Kic   Kic_0   0.16000000   0.06558048
Kic   Kic_1   0.44745763   0.05789989
Sp    Sp_0    0.04968944   0.03425168
Sp    Sp_1    0.24390244   0.04742311
Yuc   Yuc_0   0.16800000   0.06687923
Yuc   Yuc_1   0.40780142   0.05852797
Zap   Zap_0   0.15151515   0.06241559
Zap   Zap_1   0.26785714   0.04831810

第三,情节:

ggplot(df2, aes(uLang, prop, fill = Lang)) +
     geom_col() +
     geom_errorbar(aes(ymin = prop - ci, ymax = prop + ci), width = 0.3) +
     guides(fill = FALSE)

enter image description here