gpt4 book ai didi

r - ggplot2 geom_boxplot : annotating counts without computing them in advance

转载 作者:行者123 更新时间:2023-12-04 03:07:15 25 4
gpt4 key购买 nike

我想在 geom_boxplot 的顶部边缘添加注释,例如 n=5n=4 以及每个箱线图中数据点的数量 情节。

我知道我可以通过预先计算计数来使用 geom_text 来做到这一点,但似乎 ggplot2,具有所有这些精彩的装箱和总结功能,应该能够自己完成吗?

假设我们有这些数据:

library(tidyverse)

dd = tribble(
~val, ~kind,
1, 'A',
3, 'A',
5, 'A',
5, 'A',
6, 'A',
3, 'B',
4, 'B',
4, 'B',
5, 'B'
)

我试过这个:

> base = ggplot(dd, aes(x=kind, y=val)) + geom_boxplot()
> base + geom_text(y=6, label=..count.., stat='count')

Error in layer(data = data, mapping = mapping, stat = stat, geom = GeomText, :
object '..count..' not found

据推测,geom_text 只是忽略了我的 stat 参数?

接下来,我尝试了这个:

> base + stat_count(aes(y=6, label=..count..), geom='text')

Error: stat_count() must not be used with a y aesthetic.

能不能做点有用的事情不应该是我自己的问题吗结果 ..count..,“y 审美”与否?

这两种尝试对我来说都是明智的。
谁能从概念上解释为什么 ggplot2 不接受这些命令?
是否有任何方法可以使用 ggplot2 提供的计数?

最佳答案

这是 ggplot2 的设计限制。如果 Hadley 现在重写它,他可能会以不同的方式实现它。从概念上讲,您希望有两个独立的映射,一个用于统计,一个用于几何。但是,ggplot2 不是这样工作的。它只有一组映射,大部分映射同时应用于 stat 和 geom。有一些解决方法,您可以使用 ..variable.. 在 geom 中引用统计中计算的变量,但映射仍然全部放在一起。

目前没有任何功能允许您指定 y 美学仅适用于 geom_text 并且 stat_count 应该忽略它。

另一个经常出现的情况是垂直或水平版本的统计数据,否则是水平或垂直的。有一个完整的包,ggstance.从概念上讲,这没有多大意义。为什么我不能使用 stat_density() 计算密度,然后将密度曲线的“x”变量(即计算密度的变量)映射到 y 美学和“y”变量(即密度的高度)到 x 美学。相反,我需要使用 stat_xdensity(),它与 stat_density() 相同,只是它交换了 x 和 y。

我一直在想,通过添加一个单独的 layer() 类型的函数来扩展 ggplot2 而不破坏它是可能的,该函数接受两个美学参数,一个用于统计,一个用于几何。即,类似于:

layer2(aes_geom(y = ..x.., x = ..y..),
aes_stat(x = variable),
geom = "line", stat = "density")

(这将绘制一条垂直密度线,类似于半个 fiddle 图的轮廓。)

我们经常遇到的另一个非直观限制是 aes 转换中的计算不考虑数据分组。例如,假设我们想用红点标记箱线图的中线。我们可能会尝试:

ggplot(iris, aes(x = Species, y = Sepal.Length)) + 
geom_boxplot() +
geom_point(aes(x = Species, y = median(Sepal.Length)), size = 3, color = "red")

这是结果:

enter image description here

中位数是针对整个数据列计算的,而不是按物种单独计算的。

关于r - ggplot2 geom_boxplot : annotating counts without computing them in advance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47777159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com