微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

由于在 y 对数刻度中转换无限值而产生的奇数 geom_bar 误差线

如何解决由于在 y 对数刻度中转换无限值而产生的奇数 geom_bar 误差线

在观察 2、3、5 上,在 LOG10 标度上绘图时,我得到了不完整的变量误差条,我收到以下消息:

NaN 产生的转换在连续中引入了无限值 y轴

library(tidyverse)
df <- tibble::tibble(
Observation = rep(1:5,2),Type = rep(c(rep("A",5),rep("B",5))),value = c(33046,970250,1870125,259625,3838750,196,578,323,509,215),sd = c(8538,319023,1538959,27754,1602186,161,687,380,474,282))


ggplot(df,aes(x=Observation,y=value,fill=Type)) + 
  geom_bar(stat="identity",color="black",position=position_dodge()) +
  geom_errorbar(aes(ymin=value-sd,ymax=value+sd),width=.2,position=position_dodge(.9)) + theme_classic() +
   # scale_fill_manual(values=c('#999999','#E69F00'))+
  scale_y_continuous(trans='log10')

请问我该如何解决

enter image description here

解决方法

这是因为 df$value - df$sd 产生负值,无法进行 log10 转换。我建议将这些值剪裁为某个正值。下面的示例使用 pmax() 将最小值设置为 1。

library(tidyverse)
df <- tibble::tibble(
  Observation = rep(1:5,2),Type = rep(c(rep("A",5),rep("B",5))),value = c(33046,970250,1870125,259625,3838750,196,578,323,509,215),sd = c(8538,319023,1538959,27754,1602186,161,687,380,474,282))


ggplot(df,aes(x=Observation,y=value,fill=Type)) + 
  geom_bar(stat="identity",color="black",position=position_dodge()) +
  geom_errorbar(aes(ymin=pmax(value-sd,1),ymax=value+sd),width=.2,position=position_dodge(.9)) + theme_classic() +
  scale_y_continuous(trans='log10',oob = scales::oob_squish_any)

reprex package (v0.3.0) 于 2021 年 1 月 8 日创建

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。