【问题标题】:Draw interval on geom_density在 geom_density 上绘制间隔
【发布时间】:2018-05-09 13:32:46
【问题描述】:

如何为 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 每个方面只运行一次。

【问题讨论】:

    标签: r ggplot2 intervals facet density-plot


    【解决方案1】:

    预先计算 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-23
      • 1970-01-01
      • 1970-01-01
      • 2015-07-18
      • 2019-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多