我希望有一种方法可以在直方图上为每个组中位数所在的位置画出一条垂直线。我可以通过首先按组分组,变异一个新列为中位数,然后按组进行平铺来实现该功能。以下是实现此目标的代码:
library(tidyverse)
N = 1000
m = c(1,5,10)
z = c('A','B','C')
d<-map2_dfr(m,z, ~data.frame(x = rbeta(N,shape1 =.x, shape2 = 20), z = .y))
d %>%
group_by(z) %>%
mutate(med = median(x)) %>%
ungroup %>%
ggplot(aes(x, fill = z))+
geom_histogram(aes(y = ..density..),bins = 10,color = 'black')+
geom_vline(aes(xintercept = med))+
facet_wrap(~z)
由于中位数是一个统计摘要,我能否使用 stat_summary
或 stat_function
和 geom="vline"
来实现相同的结果?
stat_summary
中,这是我能想到的。 - teunbrandy=4
, 并使用+stat_summary(fun="median", geom="point")
为每个面创建了一个点(median,4)
,但在将其转换成垂直线时遇到了困难。 - jtr13rnorm()
而不是rbeta()
将无法正常工作,因为实际值将远离1。有什么想法可以纠正这个问题吗? - Dan Chaltiel