我收到一条警告消息,我无法理解ggplot2中的简单条形图
> df <- data.frame(X = 127:131, Y = rnorm(5))
> df
X Y
1 127 0.9391077
2 128 -0.9392529
3 129 -1.1296221
4 130 1.1454907
5 131 1.8564596
> ggplot(df) + geom_bar(aes(X,Y), stat ="identity", position = "dodge")
Warning message:
position_dodge requires constant width: output may be incorrect
这似乎只发生在X值的特定范围内。我在谷歌上搜索了这方面的信息,但似乎都是在谈论宽度真正不同的情况,或者统计数据不是“身份”的情况。在这种情况下,X值只是整数,所以它应该很简单。
生成的图表看起来没问题,所以我对忽略一个我不理解的警告感到不安。
知道这是怎么回事吗?
发布于 2013-01-23 19:10:11
设置options(warn = 2, error = recover)
并重新运行代码可以让我们找到问题所在。
在collide
函数(调用堆栈中的第16号)中,有一段代码:
if (!zero_range(range(widths))) {
warning(name, " requires constant width: output may be incorrect",
call. = FALSE)
}
Floating point rounding errors意味着widths
采用的值略有不同。
format(widths, digits = 22)
# [1] "0.9000000000000056843419" "0.8999999999999914734872" "0.8999999999999772626325"
用于检查数字是否相同的tolerance过于严格:大约为2.2e-14。
args(zero_range)
# function (x, tol = .Machine$double.eps * 100)
# NULL
.Machine$double.eps * 100
# [1] 2.220446e-14
所以这个警告是错误的;不用担心。
https://stackoverflow.com/questions/14476961
复制相似问题