我收到一个警告消息,我不明白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)
,并重新运行代码让我们找到问题。
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
所以警告是错误的别担心