在 geom_density 上绘制间隔
Draw interval on geom_density
如何在 ggplot2 中绘制一条水平线来指示分面密度图的最高(后)密度区间?这是我试过的:
# Functions to calculate lower and upper part of HPD.
hpd_lower = function(x) coda::HPDinterval(as.mcmc(x))[1]
hpd_upper = function(x) coda::HPDinterval(as.mcmc(x))[2]
# Data: two groups with different means
df = data.frame(value=c(rnorm(500), rnorm(500, mean=5)), group=rep(c('A', 'B'), each=500))
# Plot it
ggplot(df, aes(x=value)) +
geom_density() +
facet_wrap(~group) +
geom_segment(aes(x=hpd_lower(value), xend=hpd_upper(value), y=0, yend=0), size=3)
如您所见,geom_segment
计算两个方面的所有数据,而我希望它尊重该方面。我还想要一个 HPDinterval
每个方面只有 运行 一次的解决方案。
预先计算 hpd 间隔。 ggplot 在整个数据框中评估 aes()
函数中的计算,即使数据已分组。
# Plot it
library(dplyr)
df_hpd <- group_by(df, group) %>% summarize(x=hpd_lower(value), xend=hpd_upper(value))
ggplot(df, aes(x=value)) +
geom_density() +
facet_wrap(~group) +
geom_segment(data = df_hpd, aes(x=x, xend=xend, y=0, yend=0), size=3)
如何在 ggplot2 中绘制一条水平线来指示分面密度图的最高(后)密度区间?这是我试过的:
# Functions to calculate lower and upper part of HPD.
hpd_lower = function(x) coda::HPDinterval(as.mcmc(x))[1]
hpd_upper = function(x) coda::HPDinterval(as.mcmc(x))[2]
# Data: two groups with different means
df = data.frame(value=c(rnorm(500), rnorm(500, mean=5)), group=rep(c('A', 'B'), each=500))
# Plot it
ggplot(df, aes(x=value)) +
geom_density() +
facet_wrap(~group) +
geom_segment(aes(x=hpd_lower(value), xend=hpd_upper(value), y=0, yend=0), size=3)
如您所见,geom_segment
计算两个方面的所有数据,而我希望它尊重该方面。我还想要一个 HPDinterval
每个方面只有 运行 一次的解决方案。
预先计算 hpd 间隔。 ggplot 在整个数据框中评估 aes()
函数中的计算,即使数据已分组。
# Plot it
library(dplyr)
df_hpd <- group_by(df, group) %>% summarize(x=hpd_lower(value), xend=hpd_upper(value))
ggplot(df, aes(x=value)) +
geom_density() +
facet_wrap(~group) +
geom_segment(data = df_hpd, aes(x=x, xend=xend, y=0, yend=0), size=3)