hist()错误:'breaks'不涵盖'data'的范围,barplot(,log="y")错误:'height + offset <= 0'。

5

在x轴上,我有大量的数据(0:700) 当我使用以下代码:

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

我得到了这张图:

enter image description here

但是我想获得更小的断点值。 我试图修改突破点的值,但是我收到一个错误

Error in hist.default(data, breaks = seq(5, 700, by = 10)) : some 'data' not counted; maybe 'breaks' do not span range of 'data'


后续问题:

按照答案所建议的将breaks = seq(0, 700, by = 10)设置后,hist()可以正常运行,但是barplot()给了我错误:

error log axis: at least one value 'height + offset <= 0

发生了什么?

1个回答

3
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' 没有被计算; 可能 'breaks' 没有覆盖到 'x' 的范围

使用 barplot 后的问题:

错误日志轴: 至少有一个值 'height + offset <= 0'

我猜测发生了什么。检查一下 min(dh$counts),我认为它是0。你知道,log(0) = -INF,你不能绘制它。

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

为什么不对 foo <- hist(data, plot = FALSE) 进行检查,看看它选择了哪些区间和断点?很可能 hist() 已经明智地选择了区间大小,以避免出现0次数。

当你尝试调整自动选择的区间大小时,应该目标是实现相同的效果,而不会出现0。 (好吧,如果在 barplot() 中不设置 log = "y",那么实际上并不重要。)

我还可以给你一个技巧/欺骗。你可以这样做: barplot(dh$counts + 1, log = "y", ...)。加1后,最小的 log 值为0,就没有问题了!当然,计数值会发生变化,但很可能在你的图表展示中不会被注意到。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接