以下代码用于在ggplot2中生成小提琴图:
ggplot(violin,aes(x=variable,y=log(value+0.5),color=Group)) +
geom_violin(scale="width") +
geom_jitter(aes(group=Group), position=position_jitterdodge()) +
stat_summary(fun.y="mean",geom="crossbar", mapping=aes(ymin=..y.., ymax=..y..),
width=1, position=position_dodge(),show.legend = FALSE) +
theme(axis.text.x = element_text(angle = 45, margin=margin(0.5, unit="cm")))
结果图如下:
如您所见,有些点在小提琴形状的边界之外抖动,我需要将这些点放在小提琴的内部。我玩过不同程度的抖动,但没有取得任何成功。我将不胜感激实现这一目标的任何指针。
答案 0 :(得分:5)
软件包ggbeeswarm
具有准随机性和蜂群性,它们完全可以满足您的搜索需求:https://github.com/eclarke/ggbeeswarm
答案 1 :(得分:3)
选项1
使用geom_beeswarm软件包中的geom_quasirandom函数:
准随机几何是一种方便的方法,可以抵消类别内的点以减少过度绘图。使用vipor包。
library(ggbeeswarm)
p <- ggplot(mpg, aes(class, hwy))
p + geom_violin(width = 1.3) + geom_quasirandom(alpha = 0.2, width = 0.2)
选项2
这不是令人满意的答案,因为通过限制水平抖动,我们无法达到处理过度绘图的目的。但是,您可以扩大小提琴图的宽度(width = 1.3
),并使用alpha
来提高透明度,并限制水平抖动(width = .02
)。
p <- ggplot(mpg, aes(class, hwy))
p + geom_violin(width = 1.3) + geom_jitter(alpha = 0.2, width = .02)
答案 2 :(得分:3)