5

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

我假设这是通过获取一些总面积(我们称之为数量 X)并在所有要绘制的小提琴之间按比例划分的,从而在内部进行操作。这就是我想要的,除了如果组之间的 N 存在足够大的差异以致某些组的 N 相对较低,这可能导致小提琴非常窄。在我的情况下,这只会使填充颜色有点难以看到。

我认为这可以在很大程度上解决,至少在我的情况下,只需将 X 扩展一点,以便真正小的小提琴获得足够的区域以保持可读性。换句话说,我想根据观察次数保留小提琴之间的面积变化,但增加小提琴之间划分的总面积的“池”,以便每个小提琴都稍微变大。

任何人都知道如何做到这一点?为此必须有一个切换。我尝试过对geom_violin诸如width, size,等的参数大惊小怪violinwidth,但到目前为止还没有运气......

编辑:一个可以试验的无聊但可重复的“样本”数据集的代码。

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")
4

1 回答 1

1

您可以通过调整width里面的参数来做到这一点geom_violin。但请确保也使用position_dodge以避免重叠的情节。

使用您的数据

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

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

通过使用允许地块之间存在一些差距position_dodge

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

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

于 2017-09-05T14:06:26.200 回答