绘制加权分布

问题描述 投票:0回答:1

假设我有以下数据:

c1 <- runif(100, 0,1)
c2 <- runif(100, 0,1)
weights <- runif(100, 1,50)
categorie <- rbinom(100,1,0.5)

df <- as.data.frame(cbind(c1,c2,weights,categorie))

我想在同一个图中表示 c1 的两个分布(给定 categorie=0 或给定 categorie=1),并且我想通过变量权重对每个观察值进行加权。此外,在 y 轴上,我想要加权比例而不是加权数字。

如何使用 ggplot2 做到这一点?

非常感谢!

r ggplot2 weighted
1个回答
1
投票

如果我理解正确的话,您想要将 c1 和 c2 的相对加权密度绘制为 y 轴上的连续变量,使得密度之和始终为 1。这将给出相对加权密度的直观描述c1 到 c2。

我们可以通过转为长格式来做到这一点,以便所有值都在一个列中,并且我们有一个列标记这些值是来自 c1 还是 c2。然后我们绘制

geom_density
,确保我们将
fill
映射到新的
name
列,并将
weight
映射到
weights
列。我们还需要将
position
设置为
position_fill

为了使绘图显示的内容更清晰,最好沿着绘图的上下边界绘制地毯图。

tidyr::pivot_longer(df, c1:c2) |>
  ggplot(aes(value, fill = name)) +
  geom_density(aes(weight = weights), position = 'fill', 
               alpha = 0.3, linewidth = 0.2) +
  geom_point(aes(x = value, y = ifelse(name == 'c1', 1, 0), color = name),
             shape = '|', size = 8, show.legend = FALSE) +
  scale_color_manual(values = c('orangered', 'deepskyblue4')) +
  scale_fill_manual(values = c('orangered', 'deepskyblue4')) +
  theme_bw(base_size = 16) +
  coord_cartesian(expand = FALSE) +
  labs(x = 'Value of c1 or c2', y = 'Weighted proportion', fill = NULL)

© www.soinside.com 2019 - 2024. All rights reserved.