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

时间:2016-08-03 15:01:16

标签: r ggplot2 violin-plot

geom_violin内拨打ggplot2时,您可以指定每个小提琴的面积应与构成该小提琴的观察数量成比例,方法是指定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")

1 个答案:

答案 0 :(得分:1)

您可以通过调整width内的geom_violin参数来执行此操作。但请务必使用position_dodge以避免重叠图。

使用您的数据

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

将给出以下情节 enter image description here

使用position_dodge

在图表之间留出一些空隙
ggplot(df, aes(x=x, y=y, fill=z)) + geom_violin(scale="count", width=2, position=position_dodge(width=0.5))

这将为您提供以下非重叠图 enter image description here