我正在尝试使用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)
答案 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轴来轻松纠正这个问题,但我认为值得一提。