通过ggplot2抑制小提琴图中的散乱抖动点

akh*_*h22 3 r ggplot2 violin-plot

以下用于在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")))
Run Code Online (Sandbox Code Playgroud)

得到的情节看起来如下;

在此输入图像描述

正如你所看到的,有些点在小提琴形状的边界外抖动,我需要把这些点放在小提琴里面.我玩过不同程度的抖动,但都取得了成功.我很欣赏任何能够实现这一目标的指示.

Alf*_*nso 7

这是一个有点老的问题,但我认为有更好的解决方案。

正如 @Richard Telford 在评论中指出的那样,geom_sina这是 IMO 的最佳解决方案。

模拟数据

df <- data.frame(data=rnorm(1200), 
                 group=rep(c("A","A","A", "B","B","C"),
                           200)
                 )
Run Code Online (Sandbox Code Playgroud)

制作情节

ggplot(df, aes(y=data,x=group,color=group)) +
  geom_violin()+
  geom_sina()
Run Code Online (Sandbox Code Playgroud)

结果

在此输入图像描述

希望这有帮助。


Jan*_*uhr 5

该软件包ggbeeswarm具有geoms quasirandom和beeswarm,它们正是您正在搜索的内容:https://github.com/eclarke/ggbeeswarm


mpa*_*nco 5

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

在此输入图像描述

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

在此输入图像描述