Избегайте перекрытия при точках с дрожанием

При чтении научных статей я часто сталкиваюсь с графиками, где точки дрожат, не перекрывая друг друга. Я подозреваю, что многие из них нарисованы с помощью программы GraphPad Prism, но, безусловно, должен быть способ сделать то же самое в R. Хотя это не идеально (как с красными точками ниже) Я думаю, что он выглядит намного лучше, чем случайный дрожание.

Jittered points without overlap

Если кто-нибудь знает, как это сделать, предпочтительно, используя некоторую базовую функцию, я был бы очень рад узнать.

Ответ 1

Вот решение ggplot2 с помощью geom_dotplot():

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