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

Baj*_*jcz 5 r ggplot2 violin-plot

在对的调用geom_violinggplot2,您可以通过指定来指定每个小提琴的面积与组成该小提琴的观察次数成正比scale="count"

我假设这是在内部进行操作的,方法是取一些总面积(我们称此数量X),并将其按比例分配给所有要绘制的小提琴。这就是我想要的,除了如果组之间的N差异足够大,从而导致某些组的N相对较低,这会导致小提琴非常狭窄。在我的情况下,这只会使填充色很难看清。

我认为,至少在我的情况下,可以简单地将X稍微扩展一点,从而使很小的小提琴具有足够的可读性,从而在很大程度上解决该问题。换句话说,我想根据观察次数保留小提琴之间的面积差异,但要增加小提琴之间分配的总面积的“池”,以使每个小提琴变得更大。

任何人都不知道如何实现这一目标?必须为此进行切换。我试着用大惊小怪参数geom_violin,如widthsizeviolinwidth,等,但至今没有运气...

编辑:编码一个无聊但可重现的“样本”数据集,供人们进行试验。

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")
Run Code Online (Sandbox Code Playgroud)

MaM*_*aMu 1

您可以通过调整width内部参数来做到这一点geom_violin。但请确保同时使用position_dodge以避免重叠图。

使用您的数据

ggplot(df, aes(x=x, y=y, fill=z)) + geom_violin(scale="count", width=2)
Run Code Online (Sandbox Code Playgroud)

将给出以下情节 在此输入图像描述

通过使用允许图之间存在一些间隙position_dodge

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

这将为您提供以下不重叠的图 在此输入图像描述