如何使用数字 x 值在 ggplot 中创建 box/violin 图?

How does one create a box/violin plot in ggplot with numeric x values?

我想从 2D 数值数据创建一个箱形图或小提琴图,很像此处的图 1A 和 1B 中给出的图 (Goodman, et al., Science, 2003) 和下面给出的:

在给定 x-y 数据的情况下,在 ggplot2 中是否有一种直观的方法可以做到这一点?

基本上,我认为我需要先对 x 数据进行分箱,然后汇总 y 数据进行绘图,但我不太清楚如何利用 ggplot 函数来执行此操作。

由于您没有提供示例数据,我将展示一个使用随机数据的基本示例。 您可以使用函数 cut 创建中断以对数据进行分组,然后 boxplot 创建图表。

Base

set.seed(12)
y <- rnorm(1000)
x <- rnorm(1000)
rng <- seq(-3, 3, 0.5)
boxplot(y ~ cut(x, breaks = rng), las = 2)

Using ggplot2

set.seed(12)
y <- rnorm(1000)
x <- rnorm(1000)
df <- data.frame(x = cut(x, breaks=rng), y= y)
ggplot(data = df, aes(x= x , y= y)) + geom_boxplot(aes(fill = x))