试图在ggplot2中绘制简单直方图给出“错误:position_stack需要恒定宽度”

时间:2011-09-20 21:53:45

标签: r ggplot2

为什么会这样?我该如何解决这个问题?

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

1 个答案:

答案 0 :(得分:2)

我将在这里走出困境并猜测这是一个数值精度问题。使用tracebackdebug进行一点调查后发现问题出现在函数collide的此检查中:

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

宽度与sd太大不同。这个问题随着较小的值而消失的事实进一步似乎是数值精度问题的证据。

但是用于生成宽度的值并不是来自collide,所以真正的问题可能是由上游引起的,尽管我不太熟悉ggplot的内部推测进一步