为什么会这样呢?我该如何解决?
> qplot(c(0,0,0,0,1e12))
stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.
Error: position_stack requires constant width
> qplot(c(0,0,0,0,1e12), binwidth=1e12/30)
Error: position_stack requires constant width
> qplot(c(0,0,0,0,1e12), binwidth=1e10) # works
> qplot(c(0,0,0,0,1e12), binwidth=1e11) # works
我找到了http://r.789695.n4.nabble.com/ggplot2-histograms-a-subtle-error-found-td2305814.html,但在他们的情况下,问题是binwidth比值小得多。在这里,它们处于相似的数量级。
最佳答案
我将在这里走出去,猜测这是一个数值精度问题。仔细研究traceback
和debug
可以发现在collide
函数的检查中出现了问题:
if (check.width && length(widths) > 1 && sd(widths) > 1e-06) {
stop(name, " requires constant width", call. = FALSE)
}
宽度恰好足以使sd太大。这个问题以较小的值消失的事实似乎进一步证明了数值精度问题。
但是用于生成宽度的值并非起源于
collide
,因此实际问题可能是在更上游产生的,尽管我对ggplot
的内在知识还不甚了解。