gpt4 book ai didi

r - 对密度曲线下方的区域进行阴影处理,以标记最高密度区间 (HDI)

转载 作者:行者123 更新时间:2023-12-02 19:44:55 24 4
gpt4 key购买 nike

我认为这应该很简单,但尽管网上有大量信息,我还是迷失了方向。

我的问题:我有一个数据点向量,我想为其绘制密度曲线,然后为曲线下的区域着色以表示最高密度区间 (HDI)。当然,我试图通过 ggplot2 来实现这一点包,特别是 qplot() ,因为我的数据是向量,而不是数据框。

可重现的示例

library(ggplot2)
library(HDInterval)

## create data vector
set.seed(789)
dat <- rnorm(1000)

## plot density curve with qplot and mark 95% hdi
qplot(dat, geom = "density")+
geom_vline(aes(xintercept = c(hdi(dat))))

所以我明白了:

density_curve

但我真正想要的是这样的:

what_i_want

有没有一种简单的方法可以通过ggplot2::qplot来实现这一点?

最佳答案

您可以使用 ggridges 包来完成此操作。诀窍是我们可以将 HDInterval::hdi 作为分位数函数提供给 geom_密度_ridges_gradient(),并且我们可以用它生成的“分位数”来填充。 “分位数”是下尾、中尾和上尾的数字。

作为一般建议,我建议不要使用 qplot()。它更有可能引起困惑,并且将向量放入 tibble 中并不需要花费太多精力。

library(tidyverse)
library(HDInterval)
library(ggridges)
#>
#> Attaching package: 'ggridges'
#> The following object is masked from 'package:ggplot2':
#>
#> scale_discrete_manual

## create data vector
set.seed(789)
dat <- rnorm(1000)

df <- tibble(dat)

## plot density curve with qplot and mark 95% hdi
ggplot(df, aes(x = dat, y = 0, fill = stat(quantile))) +
geom_density_ridges_gradient(quantile_lines = TRUE, quantile_fun = hdi, vline_linetype = 2) +
scale_fill_manual(values = c("transparent", "lightblue", "transparent"), guide = "none")
#> Picking joint bandwidth of 0.227

reprex package于2019年12月24日创建(v0.3.0)

scale_fill_manual() 中的颜色按照三组的顺序排列,因此,例如,如果您只想对左尾进行着色,则可以编写 values = c( “浅蓝色”、“透明”、“透明”)

关于r - 对密度曲线下方的区域进行阴影处理,以标记最高密度区间 (HDI),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59471972/

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