对于geom_violin,如何指定所有小提琴的总面积?

在ggplot2中调用geom_violin时,您可以通过指定scale =“count”来指定每个小提琴的面积应与构成该小提琴的观察数量成比例.

我假设这是通过占用一些总面积(让我们称之为X量)并在所有要绘制的小提琴中按比例分配来在内部进行操作.这就是我想要的,除非这会导致相当窄的小提琴,如果组之间的N有足够的差异,使得某些组具有相对较低的N.在我的情况下,这只会使填充颜色很难看到.

我认为这可以在很大程度上解决,至少在我的情况下,通过简单地扩展X一点点,以便真正小的小提琴获得足够的区域仍然可读.换句话说,我希望根据观察的数量保留小提琴之间的面积变化,但是增加在小提琴之间划分的总面积的“池”,使得每一个都略微变大.

任何人都知道如何实现这一目标?必须要为此进行切换.我已经尝试过使用geom_violin的论据,例如宽度,大小,小提琴宽度等等,但到目前为止还没有运气……

编辑:一个可以尝试的无聊但可重现的“样本”数据集的代码.

y = runif(100, 1, 10)
x = as.factor(rep(c(1,2), times=50))
z = as.factor(c(rep(1, 10), rep(2, 90)))
df=data.frame(x, y, z)
ggplot(df, aes(x=x, y=y, fill=z)) + geom_violin(scale="count")

最佳答案 您可以通过调整geom_violin中的width参数来完成此操作.但请务必使用position_dodge以避免重叠图.

使用您的数据

ggplot(df, aes(x=x, y=y, fill=z)) + geom_violin(scale="count", width=2)

将给出以下情节
《对于geom_violin,如何指定所有小提琴的总面积?》

使用position_dodge在绘图之间留出一些空隙

ggplot(df, aes(x=x, y=y, fill=z)) + geom_violin(scale="count", width=2, position=position_dodge(width=0.5))

这将为您提供以下非重叠图
《对于geom_violin,如何指定所有小提琴的总面积?》

点赞