假设我有以下数据:
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 做到这一点?
非常感谢!
如果我理解正确的话,您想要将 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)