ggplot中的特殊变量(..count..、..density..等)

50

考虑以下行。

p <- ggplot(mpg, aes(x=factor(cyl), y=..count..))

p + geom_histogram()   
p + stat_summary(fun.y=identity, geom='bar')

理论上,最后两个应该产生相同的图表。但在实践中,stat_summary 失败并抱怨缺少所需的 y 美学属性。

为什么我不能在 stat_summary 中使用 ..count..? 我在文档中找不到任何关于如何使用这些变量的信息。


5
这些变量由stat_bin返回,它被geom_histogram调用,但不是由stat_summary返回(因为你应该提供自己的统计数据),因此这些变量不可用。 - joran
2个回答

61

扩展@joran的评论,ggplot中用双点括起来的特殊变量(..count....density..等)是原始数据集的统计变换得到的。这些特定的变量是由stat_bin返回的,而geom_histogram隐式调用了它(请注意在文档中stat参数的默认值为"bin")。您的第二个示例调用了一个不创建名为..count..的变量的不同统计函数。您可以使用以下代码获得相同的图形

p + geom_bar(stat="bin")

在更新版本的 ggplot2 中,可以使用 stat 函数代替封闭的 ..,因此 aes(y = ..count..) 可以写成 aes(y = stat(count))


3
我想对 .. count .. 变量和用户定义的变量(我已经用常数做过了)执行一个算术运算(在这种情况下是加法)。不幸的是, ggplot2 不认识这个变量的名称并且会产生一个错误。有什么想法,Brian? - Aleksandr Blekh
2
@AleksandrBlekh 这应该是一个新问题,而不是对旧问题答案的评论。我一时半会儿想不出这是可能的。在您的主数据框中,一个变量可能有比转换后的 ..count.. 变量更多的值,因此没有办法将它们匹配起来。如果没有更多细节和可重现的示例(例如一个新问题),我不能确定地回答。 - Brian Diggs
好的!我原以为这个问题太“小”了,不值得发布一个单独的帖子。我已经明白这是不可能的,你的评论进一步证实了我的想法。谢谢! - Aleksandr Blekh
1
我真的希望 geom_bar 函数能像它的近亲函数 geom_histogram 一样生成 ..density.. 变量。 - aaiezza

1

作为 ggplot 3.3.0 的一部分, 首选的 API 已更改为使用 after_stat() 方法。以下两种方式是等效的:

aes(y=..count..)
aes(y=stat(count))
aes(y=after_stat(count))

随着v3.4.0的发布,前两个已被弃用,after_stat()是首选API(请参见发布说明)。

解释计算阶段的文档,但了解可用的计算值取决于添加的特定层。例如,stat_bin()层(geom_histogram()使用)将计算:

  • count
  • density
  • ncount
  • ndensity
  • width

这些信息可以在方法文档的“计算变量”部分中找到。另一个例子是stat_count()(它在离散上使用geom_bar())计算countprop(请参见文档)。因此,请查阅相应的图层以获取类似的信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接