在x轴上,我有大量数据(0:700) 当我使用它时:
dh <- hist(data)
barplot(dh$counts, log="y", col="white", names.arg=dh$breaks[-1])
我得到这张图片:
但我希望得到更小的休息值。 我试图修改中断值但是我收到错误
hist.default出错(数据,break = seq(5,700,by = 10)):某些“数据”未计算在内;也许'休息'不会跨越'数据'范围
跟进:
根据答案的建议设置breaks = seq(0, 700, by = 10)
后,hist()
工作正常但barplot()
给了我错误:
错误日志轴:至少一个值'height + offset&lt; = 0
发生了什么事?
答案 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,完全没有问题!当然,计数值会发生变化,但很可能在你的情节中不会引人注意。