我正在使用 ggplot2 制作直方图:
geom_histogram(aes(x=...), y="..ncount../sum(..ncount..)")
我得到了错误:
Mapping a variable to y and also using stat="bin".
With stat="bin", it will attempt to set the y value to the count of cases in each group.
This can result in unexpected behavior and will not be allowed in a future version of ggplot2.
If you want y to represent counts of cases, use stat="bin" and don't map a variable to y.
If you want y to represent values in the data, use stat="identity".
See ?geom_bar for examples. (Deprecated; last used in version 0.9.2)
一般是什么原因造成的?我对这个错误感到困惑,因为我没有将变量映射到
y
, 只是直方图 x
并希望直方图条的高度表示数据的归一化部分(这样所有条的高度加起来就是数据的 100%。)编辑:如果我想制作密度图
geom_density
而不是 geom_histogram
, 我用 ..ncount../sum(..ncount..)
或 ..scaled..
?我不清楚 ..scaled..
是什么做。
最佳答案
这里的混淆是一个长期存在的混淆(如冗长的警告消息所证明的那样),一切都以 stat_bin
开头。 .
但用户通常不会意识到他们的困惑围绕着 stat_bin
,因为他们在使用 geom_bar
时通常会遇到问题或 geom_histogram
.请注意每个文档:它们都使用 stat = "bin"
(在当前 ggplot2 版本中,此统计信息默认分为 stat_bin
用于连续数据和 stat_count
用于离散数据)。
但是,让我们备份。 geom_*
' 控制将数据实际呈现为某种几何形式。 stat_*
只是转换您的数据。区别在实践中有点困惑,因为添加了一层stat_bin
默认情况下,将调用 geom_bar
所以它看起来与 geom_bar
没有区别在你学习的时候。
无论如何,请考虑类似“条形”的几何图形:直方图和条形图。两者显然都将涉及沿线某处的一些数据分箱。但我们的数据可以是预先汇总的,也可以不是。例如,我们可能想要一个条形图:
x
a
a
a
b
b
b
或等效地来自
x y
a 3
b 3
第一个还没有被装箱。第二个是预装箱。
geom_bar
的默认行为和 geom_histogram
是假设您没有预先分箱您的数据。所以他们会尝试调用stat_bin
(对于直方图,现在 stat_count
对于条形图)在您的 x
上值(value)观。正如警告所说,它将尝试映射
y
为您计算结果。如果您还尝试映射 y
你自己到其他一些变量,你最终会出现在这里有龙的领域。测绘y
到 stat_bin
返回的变量的函数( ..count..
等)应该没问题,不应该抛出那个警告(它不适合我使用上面@mnel 的例子)。这里的要点是
geom_bar
如果您已经预先计算了条形的高度,请始终记住使用 stat = "identity"
,或者更好的是使用更新的geom_col
使用 stat = "identity"
默认情况下。对于 geom_histogram
您不太可能预先计算 bin,因此在大多数情况下,您只需要记住不要映射 y
除了从 stat_bin
返回的内容之外的任何内容.geom_dotplot
使用它自己的分箱统计,stat_bindot
,我相信这个讨论也适用于这里。这种事情通常不会成为二维分箱案例( geom_bin2d
和 geom_hex
)的问题,因为在类似的 z
中没有那么多的灵 active 。分箱 y
的变量在一维情况下的变量。如果 future 的更新开始允许对 2d 分箱案例进行更多花哨的操作,我想这可能会成为您必须注意的事情。
关于r - ggplot2 将变量映射到 y 并使用 stat ="bin"时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15651084/