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

时间:2017-10-09 21:35:26

标签: r ggplot2 density-plot gplots ggridges

我正在尝试使用ggridges包创建一个joyplot(基于ggplot2)。一般的想法是,一个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 个答案:

答案 0 :(得分: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自动生成。

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