2

我正在尝试使用ggridges包(基于ggplot2)创建一个游戏图。一般的想法是,joyplot 创建了很好的比例堆叠密度图。但是,我似乎无法使用加权密度产生其中之一。是否有某种方法可以将采样权重(用于加权密度)合并到创建欢乐图的密度计算中?

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

此外,这里是 ggplot 中未加权的游戏图的示例。我正在尝试将其转换为加权图,其密度根据 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)
4

1 回答 1

7

看起来这样做的方法是使用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_densityx 轴范围时,其行为似乎略有不同:它会将密度图修剪到数据范围并丢弃漂亮的尾巴。您可以通过手动扩展 x 轴轻松纠正此问题,但我认为值得一提。

于 2017-10-11T02:04:13.570 回答