首页 > 解决方案 > 使用 geom_violin 分层小提琴图以比较分布

问题描述

我正在尝试使用小提琴图比较组间连续变量的分布。相当容易。但是,我想通过在背景中以低 alpha 值显示其中一组(参考)的分布来更容易地进行分布比较。像这样,但有小提琴情节:

在此处输入图像描述

我目前的方法将数据绘制了两次。首先geom_violin,我复制了参考组的数据并将其绘制为灰色。第二geom_violin,我使用实际数据d。在此示例中,灰色和蓝色的两个小提琴图对于“蓝色”组应该看起来相同。但是,即使它们基于组“蓝色”的完全相同的数据,它们也不相同。

我该如何解决这个问题?还是有另一种更好的方法来做到这一点?

d <- tibble(
        group = sample(c("green", "blue"), 1000, replace = TRUE, prob = c(0.7, 0.3)),
        x = ifelse(group == "green", rnorm(1000, 1, 1), rnorm(1000, 0, 3))
    )

dblue <- filter(d, group == "blue")
dblue <- bind_rows(dblue, mutate(dblue, group = "green"))

ggplot(d, aes(x = factor(group), y = x)) +
    geom_violin(data = dblue, fill = alpha("#333333", 0.2), color = alpha("#333333", 0)) +
    geom_violin(fill = alpha("#0072B2", 0.8), color = alpha("#0072B2", 0))

在此处输入图像描述

标签: rggplot2violin-plot

解决方案


添加scale = "width"到第二个geom_violin

ggplot(d, aes(x = factor(group), y = x)) +
  geom_violin(data = dblue, fill = alpha("#333333", 0.2), color = alpha("#333333", 0)) +
  geom_violin(fill = alpha("#0072B2", 0.8), color = alpha("#0072B2", 0),
              scale = "width")

在此处输入图像描述


推荐阅读