我正在使用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..
做了什么。
答案 0 :(得分:41)
这里的混淆是一个长期存在的问题(由详细的警告信息证明),所有这些都以stat_bin
开头。
但是,用户通常不会意识到他们的混淆围绕stat_bin
,因为他们在使用geom_bar
或geom_histogram
时通常会遇到问题。请注意每个文档:它们都使用stat = "bin"
(在当前 ggplot2 版本中,此统计信息已分为stat_bin
表示连续数据,stat_count
表示离散数据)默认情况下。
但是让我们回来吧。 geom_*
控制数据的实际呈现为某种几何形式。 stat_*
只是简单地转换您的数据。这种区别在实践中有点令人困惑,因为默认情况下,添加一层stat_bin
会调用geom_bar
,因此在您学习时它似乎与geom_bar
无法区分。
无论如何,请考虑类似“条形”的geom:直方图和条形图。两者显然都会涉及到某些地方的数据分类。但我们的数据可以预先总结或不预先。例如,我们可能想要一个条形图:
x
a
a
a
b
b
b
或等同于
x y
a 3
b 3
第一个尚未装箱。第二个是预先装箱。 geom_bar
和geom_histogram
的默认行为是假设您已将不预先分箱数据。因此,他们会尝试在您的stat_bin
值上调用stat_count
(对于直方图,现在为条形图x
)。
如警告所示,它会尝试将y
映射到最终的计数。如果您也尝试将y
自己映射到其他变量,则最终会出现在Here Here Be Dragons区域中。将y
映射到stat_bin
(..count..
等)返回的变量的函数应该没问题,不应该抛出警告(不适合我使用上面的@mnel示例)
这里的内容是geom_bar
,如果您已经预先计算了条形图的高度,请务必使用stat = "identity"
,或者更好地使用较新的geom_col
默认情况下使用stat = "identity"
。对于geom_histogram
,您不太可能预先计算出二进制数,因此在大多数情况下,您只需要记住不要将y
映射到stat_bin
以外的任何内容。
geom_dotplot
使用它自己的分档统计信息stat_bindot
,我相信此讨论也适用于此。对于二维分箱案例(geom_bin2d
和geom_hex
),这类事情通常不是问题,因为类似的z
变量中没有那么多的灵活性可用于1d案例中的binned y
变量。如果未来的更新开始允许对2d binning案例进行更多花哨的操作,我认为这可能会成为你必须注意的事情。
答案 1 :(得分:8)
geom_histogram
的文档说明它是stat_bin
和geom_bar
的别名
使用geom_density
stat_density
州的文档
点击链接(或直接找到帮助页面)
stat_bin
stat_bin
的文档描述了stat_bin
如何使用以下(附加)列返回data.frame
计数 bin中的点数
密度 bin中点的密度,缩放以集成到1
ncount 计数,缩放到最大值1
ndensity 密度,最大为1
stat_density
stat_density
的文档描述了stat_density
如何使用以下(附加)列返回data.frame
密度密度估算
计数密度*点数 - 对堆积密度图有用
缩放密度估算值,最大值为1
要以相同比例生成图表,您希望来自..ndensity..
的{{1}}和来自stat_bin
的{{1}}或..scaled..
来自<{1}} p>
stat_density