为什么我得到“position_dodge需要恒定宽度”,即使宽度在ggplot2中是不变的

前端之家收集整理的这篇文章主要介绍了为什么我得到“position_dodge需要恒定宽度”,即使宽度在ggplot2中是不变的前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我收到一个警告消息,我不明白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值的范围似乎才会发生。我已经搜索了关于这个的信息,但这一切似乎都在谈论宽度真的不同的情况,或者stat不是“身份”的情况。在这种情况下,X值只是整数,所以应该很简单。

制作的图表看起来很好,所以我很不安,只是忽略了一个我不明白的警告。

任何想法发生了什么?

解决方法

设置 options(warn = 2,error = recover),并重新运行代码让我们找到问题。

在碰撞功能(调用堆栈中的16号)内,有这段代码

if (!zero_range(range(widths))) {
    warning(name," requires constant width: output may be incorrect",call. = FALSE)
}

Floating point rounding errors表示宽度略有不同。

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

所以警告是错误的别担心

猜你在找的CSS相关文章