2012-08-09 179 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