hist()错误:'break'不跨越'data'和barplot(,log =“y”)错误的范围:'height + offset< = 0

时间:2016-05-27 08:40:03

标签: r plot histogram bar-chart

在x轴上,我有大量数据(0:700) 当我使用它时:

dh <- hist(data)
barplot(dh$counts, log="y", col="white", names.arg=dh$breaks[-1])

我得到这张图片:

enter image description here

但我希望得到更小的休息值。 我试图修改中断值但是我收到错误

  

hist.default出错(数据,break = seq(5,700,by = 10)):某些“数据”未计算在内;也许'休息'不会跨越'数据'范围

跟进:

根据答案的建议设置breaks = seq(0, 700, by = 10)后,hist()工作正常但barplot()给了我错误:

  

错误日志轴:至少一个值'height + offset&lt; = 0

发生了什么事?

1 个答案:

答案 0 :(得分:2)

hist的原始问题:

我认为你应该像你在评论中所说的那样breaks = seq(0, 700, by = 10)举报range(data)来设置c(0, 690)

如果中断不包含您的数据范围,

hist.default()将报告错误。您当前的设置:breaks = seq(5, 700, by = 10)最小值为5,最大值为695,左边界略有不足。

我可以轻松地重现您看到的错误:

set.seed(0); x<-rexp(1000,1)
range(x)
# [1] 0.001700975 6.584532959
hist(x, breaks = seq(0.002, 7.002, by = 0.5))
  

hist.default(x,breaks = seq(0.002,7.002,by = 0.5))出错:     一些'x'不算;也许'休息'不会超出'x'的范围

barplot的后续问题:

  

错误日志轴:至少一个值'height + offset&lt; = 0

我可以猜到发生了什么。检查min(dh$counts),我认为它是0.你知道,log(0) = -INF,你无法绘制它。

  

是的我有0值。但为什么它在我使用seq(0,700,by = 10)之前有效呢?

为什么不检查foo <- hist(data, plot = FALSE),看看它选择了哪些bin单元格和中断?有可能hist()明智地选择了bin大小,因此不会发生0计数。

当你尝试优化自动选择的bin大小时,你应该达到相同的目标,而不是产生0.(好吧,如果你没有在log = "y"设置barplot()那么它真的没关系。)

我也可以给你一招/骗子。你可能会barplot(dh$counts + 1, log = "y", ...)。添加1后,最小log值为0,完全没有问题!当然,计数值会发生变化,但很可能在你的情节中不会引人注意。