R中的ggplot - 停止误差条低于零

时间:2017-11-17 13:30:22

标签: r ggplot2

我正在绘制几种鸟类的模拟人口密度+/-标准误差。因为y变量是密度,小于零的值没有意义,我想截断误差线,使它们不低于零。但是,我在这方面遇到了麻烦。

此代码工作正常,但正如您所看到的Black Kite,错误栏低于零:

readline()

我尝试了几种选择。最明显的一个是将误差条本身的ymin修改为不低于零。但是,这会完全扰乱错误条,我不确定原因:

bird.plot.data <- data.frame(species = rep(c("Black kite", "Cormorant","Goosander"),2),
                             Restored = c(rep("YES",3), rep("NO",3)),
                             est.count = c(1.48, 3.12, 20.0, 0, 5.18, 2.11),
                             std.err = c(1.78, 1.78, 1.39, 0, 0.66, 1.02))


bird.plot <- ggplot(data = bird.plot.data, aes(x = Restored))+
  facet_wrap(~ species, scales = "free_y")+
  geom_col(aes(y = est.count, fill = Restored), position = position_dodge())+
  geom_errorbar(aes(ymax = est.count + std.err, ymin = est.count - std.err ))+
  scale_fill_manual(values = c("darkgreen", "olivedrab1"))+
  theme(axis.text.x = element_blank(),
        axis.ticks.x = element_blank(),
        axis.title.x = element_blank())+
  ylab("Estimated density (birds/km\U00B2)")

last_plot()

另一种选择是将y轴限制为0,因此误差条不会显示为零以下。但是,裁剪方法

b.p.mod <- ggplot(data = bird.plot.data, aes(x = Restored))+
      facet_wrap(~ species, scales = "free_y")+
      geom_col(aes(y = est.count, fill = Restored), position = position_dodge())+
      geom_errorbar(aes(ymax = est.count + std.err, ymin = max(est.count - std.err, 0)))+
      scale_fill_manual(values = c("darkgreen", "olivedrab1"))+
      theme(axis.text.x = element_blank(),
            axis.ticks.x = element_blank(),
            axis.title.x = element_blank())+
      ylab("Estimated density (birds/km\U00B2)")

    last_plot()

完全删除了错误栏,这是我不想要的。缩放方法

b.p.mod2 <- bird.plot + ylim(0,NA)
last_plot()

不让我离开高端没有指定,这很重要,因为不同的物种有不同的密度。

思考?我的首选解决方案是弄清楚为什么第一个选项会产生如此奇怪的结果。

1 个答案:

答案 0 :(得分:0)

我知道这是一篇旧帖子,但也许有人会偶然发现同样的问题。

对我来说:

geom_errorbar(aes(ymax = est.count + std.err, ymin = ifelse(est.count - std.err < 0, 0, est.count - std.err)))

工作得很好:)