r - ggplot2 将变量映射到 y 并使用 stat ="bin"时出错

标签 r ggplot2

我正在使用 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你自己到其他一些变量,你最终会出现在这里有龙的领域。测绘ystat_bin 返回的变量的函数( ..count.. 等)应该没问题,不应该抛出那个警告(它不适合我使用上面@mnel 的例子)。

这里的要点是 geom_bar如果您已经预先计算了条形的高度,请始终记住使用 stat = "identity" ,或者更好的是使用更新的geom_col使用 stat = "identity"默认情况下。对于 geom_histogram您不太可能预先计算 bin,因此在大多数情况下,您只需要记住不要映射 y除了从 stat_bin 返回的内容之外的任何内容.
geom_dotplot使用它自己的分箱统计,stat_bindot ,我相信这个讨论也适用于这里。这种事情通常不会成为二维分箱案例( geom_bin2dgeom_hex )的问题,因为在类似的 z 中没有那么多的灵 active 。分箱 y 的变量在一维情况下的变量。如果 future 的更新开始允许对 2d 分箱案例进行更多花哨的操作,我想这可能会成为您必须注意的事情。

关于r - ggplot2 将变量映射到 y 并使用 stat ="bin"时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15651084/

相关文章:

r - 如何根据facet_wrap所有方面的值限制x轴长度

r - 如何在geom_hex图中将图例中的计数显示为百分比

r - OSM 自动绘图自动更改坐标

r - 抖动 geom_line()

r - 如何按 data.table 中的十分位数组计算统计数据

r - 在 R 函数中将列引用传递给 group_by

r - 替代 R 中的数据框

r - 为什么 sapply() 和 options() "undesirable"?

r - ggplot2:用图例制作多条线+带

r - ggplot geom_point 上的点改变大小而没有图例?