2012-08-09 93 views
10

阅读科学论文时,我经常会遇到点抖动而没有相互重叠的情节。我怀疑他们中的很多人都是用一个名为GraphPad Prism的程序来绘制的,但是肯定在R中必须有一种方法来做同样的事情。虽然它不是完美的(如下面的红点),但我认为它看起来比随机抖动好得多。抖动点时避免重叠

Jittered points without overlap

如果有人知道如何做到这一点,最好使用一些基本的功能,我会很高兴地知道。

+4

这通常被称为* beeswarm情节*;在ggplot2的新版本中有一些功能可以做到这一点 – 2012-08-09 18:13:10

+1

啊,很高兴为它命名。使它更容易找到更多。我不熟悉ggplot(总是首选格子),但我想我总是可以为它设计一个通用功能。 在CRAN中似乎有一个名为[beeswarm]的软件包(http://cran.r-project.org/web/packages/beeswarm/index.html),它也可以。 – Backlin 2012-08-09 19:06:55

+1

ggplot的相关软件包:https://github.com/eclarke/ggbeeswarm – 2015-11-12 02:23:46

回答

13

下面是使用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

+0

谢谢,这看起来不错!而且非常简单,甚至可以治愈我最初对ggplot2的困惑:)我会坚持一段时间思考,看看有没有人知道如何在格子或基础图形中做到这一点。 – Backlin 2012-08-10 08:04:32

+0

实现了[beeswarm package](http://cran.r-project.org/web/packages/beeswarm/index.html)我上面提到的是使用标准的图形系统,所以我已经有两种很好的方法来实现它了。 – Backlin 2012-08-10 08:12:15

+0

要调整数据点的大小,请向geom_dotplot()添加一个dotsize选项 – wint3rschlaefer 2015-08-25 12:15:21