避免在抖动点时重叠

11

在阅读科学论文时,我经常看到绘制了点而没有重叠的抖动图。我怀疑其中许多是使用一个名为GraphPad Prism的程序绘制的,但肯定有一种方法可以在R中实现相同的效果。虽然它不是完美的(如下面的红点),但我认为它比随机抖动要好。

Jittered points without overlap

如果有人知道如何做到这一点,并且最好使用一些基本的函数,我会非常高兴知道。


5
这通常被称为“蜂群图”;在较新版本的ggplot2中有一些函数可以实现这个效果。 - Ben Bolker
1
啊,有个名字就好了。这样更容易找到更多信息。我不是很熟悉ggplot(一直喜欢lattice),但我想我总能反向工程出一个通用函数。似乎在CRAN中有一个叫做beeswarm的包也可以做到这个。 - Backlin
2
ggplot 相关的包:https://github.com/eclarke/ggbeeswarm - saladi
1个回答

14
这里是使用geom_dotplot()的ggplot2解决方案:
library(ggplot2)
set.seed(1234)

dat = data.frame(y=c(rpois(20, 4), rpois(20, 1), runif(20, 0, 20)), 
                category=rep(c("group_1", "group_2", "group_3"), c(20, 20, 20)))

dotplot_1 = ggplot(dat, aes(x=category, y=y)) + 
            geom_dotplot(aes(fill=category), binaxis="y", 
                         stackdir="center", binwidth=0.8) +
            stat_summary(fun.y=median, fun.ymin=median, fun.ymax=median, 
                         geom="crossbar", width=0.7)

ggsave("dotplot_1.png", dotplot_1, width=6, height=4)

enter image description here


谢谢,看起来很不错!而且相当简单,甚至可能解决我对ggplot2的初步困惑 :) 我会继续关注一段时间,看看是否有人知道如何在lattice或基本图形中完成它。 - Backlin
1
我已经意识到上面提到的beeswarm包使用标准图形系统,因此我已经有了两种很好的实现方法。 - Backlin
要调整数据点的大小,请在geom_dotplot()中添加dotsize选项。 - wint3rschlaefer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接