置信区间的barplot2错误?

时间:2015-04-11 23:10:50

标签: r ggplot2 bar-chart

所以,我有这张表

              Ccela      Cviri      Dfrag      Pfict
     S.obs    1759.00000  634.00000  747.00000 1714.00000
     S.chao1  2610.80685 1374.29167 1192.63830 2192.72862
     se.chao1   83.85972  122.35336   63.93822   55.99704

我希望通过 barplot2 或其他任何方式绘制,其置信区间与se.chao1行以及S.obsS.chao1相对应绘制为每列的组。

为此,我尝试使用barplot2(),我已将最后一行解压缩为两个文件(ci.uci.l),并将其从上一个表中删除。这样,在向ci.lci.u添加空行后,我得到了3个具有相同尺寸的表格。

运行以下内容:

barplot2(new_barplot, legend = row.names(barplot_est.plot), beside=TRUE, plot.ci = TRUE, ci.l = ci.l[1,], ci.u = ci.u[1,], col=c("lightblue","lightcyan"))

我收到以下错误

  

barplot2.default出错(new_barplot,legend =   row.names(barplot_est.plot),:'height'和'ci.u'必须有   相同的尺寸。

是否有其他方法可以使用 barplot2

执行此操作

如果没有,你能告诉我一个用 ggplots2 这样做的方法吗?

提前谢谢!

安德烈

1 个答案:

答案 0 :(得分:0)

看到Max Ghenis建议的链接,这可能是一种方法。我先重新排列了你的数据。然后,我在绘制错误条时创建了limits

library(dplyr)
library(tidyr)
library(ggplot2)

data.frame(t(mydf)) %>%
add_rownames() %>%
gather(group, value, - c(rowname, se.chao1)) -> mydf2

limits <- aes(ymax = value + se.chao1, ymin = value - se.chao1)

g <- ggplot(data = mydf2, aes(x = rowname, y = value, fill = group)) +
     geom_bar(position = "dodge", stat = "identity") + 
     geom_errorbar(limits, position = dodge, width = 0.25) +
     labs(x = "Assign your name", y = "Value")

ggsave(g, file = "april12.png")

enter image description here

DATA

mydf <- structure(list(Ccela = c(1759, 2610.80685, 83.85972), Cviri = c(634, 
1374.29167, 122.35336), Dfrag = c(747, 1192.6383, 63.93822), 
Pfict = c(1714, 2192.72862, 55.99704)), .Names = c("Ccela", 
"Cviri", "Dfrag", "Pfict"), class = "data.frame", row.names = c("S.obs", 
"S.chao1", "se.chao1"))

修改

看到OP的评论,我做了以下事情。在此版本中,您只会看到S.chao1的错误栏。

mutate(mydf2, se.chao1 = replace(se.chao1, which(group == "S.obs"), NA)) -> mydf3

dodge <- position_dodge(width=0.9)

ggplot(data = mydf2, aes(x = rowname, y = value, fill = group)) +
geom_bar(position = "dodge", stat = "identity") + 
geom_errorbar(data = mydf3, aes(ymax = value + se.chao1, ymin = value - se.chao1),
              position = dodge, width = 0.25) +
labs(x = "Assign your name", y = "Value")

enter image description here