为什么会这样呢?我该如何解决?

> 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比值小得多。在这里,它们处于相似的数量级。

最佳答案

我将在这里走出去,猜测这是一个数值精度问题。仔细研究tracebackdebug可以发现在collide函数的检查中出现了问题:

if (check.width && length(widths) > 1 && sd(widths) > 1e-06) {
            stop(name, " requires constant width", call. = FALSE)
}

宽度恰好足以使sd太大。这个问题以较小的值消失的事实似乎进一步证明了数值精度问题。

但是用于生成宽度的值并非起源于collide,因此实际问题可能是在更上游产生的,尽管我对ggplot的内在知识还不甚了解。

08-19 23:08