首页 文章

R:加权Joyplot / Ridgeplot /密度图?

提问于
浏览
1

我正在尝试使用 ggridges 包(基于 ggplot2 )创建一个joyplot . 一般的想法是,一个joyplot创建了精确缩放的堆积密度图 . 但是,我似乎无法使用加权密度生成其中一个 . 是否有一些方法可以在计算密钥套的创建中计算密度时采用抽样权重(加权密度)?

这里是 ggridges 包文档的链接:https://cran.r-project.org/web/packages/ggridges/ggridges.pdf我知道很多基于ggplot的包可以接受额外的美学,但我不知道如何为这种类型的geom添加权重 .

另外,这是ggplot中未加权的joyplot的示例 . 我试图将其转换为加权图,密度根据pweight加权 .

# Load package, set seed
library(ggplot)
set.seed(1)

# Create an example dataset
dat <- data.frame(group = c(rep("A",100), rep("B",100)),
                  pweight = runif(200),
                  val = runif(200))

# Create an example of an unweighted joyplot
ggplot(dat, aes(x = val, y = group)) + geom_density_ridges(scale= 0.95)

1 回答

  • 5

    看起来这样做的方法是使用stat_density而不是默认的 stat_density_ridges . 根据您链接到的文档:

    请注意,默认的stat_density_ridges可以对所有数据集进行联合密度估算 . 使用多面图时,这可能无法生成所需的结果 . 或者,您可以将stat =“density”设置为使用stat_density . 在这种情况下,需要添加美学映射height = ..density ..(参见示例) .

    幸运的是, stat_density (与 stat_density_ridges 不同)了解审美 weight 并将其传递给基础 density 调用 . 你得到的结果如下:

    ggplot(dat, aes(x = val, y = group)) +
      geom_density_ridges(aes(height=..density..,  # Notice the additional
                              weight=pweight),     # aes mappings
                          scale= 0.95,
                          stat="density") # and use of stat_density
    

    ..density.. 变量由 stat_density 自动生成 .

    Note: 当您使用 stat_density 时,x轴范围的行为会有所不同:它会将密度图修剪到数据范围并丢弃漂亮的尾部 . 你可以通过手动扩展x轴来轻松纠正这个问题,但我认为值得一提 .

相关问题