Ограничение рассеянных точек дрожания в заговоре скрипки ggplot2 - PullRequest
0 голосов
/ 27 июня 2018

Для создания скрипки в 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")))

Результирующий график выглядит следующим образом;

enter image description here

Как видите, некоторые точки заштрихованы за границей формы скрипки, и мне нужно, чтобы эти точки находились внутри скрипки. Я играл на разных уровнях джиттера, но добился успеха. Буду признателен за любые указатели для достижения этой цели.

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Вариант 1

Использование функции geom_quasirandom из пакета geom_beeswarm: Квазислучайный геом - это удобное средство для смещения точек внутри категорий, чтобы уменьшить переполнение. Использует пакет vipor.

library(ggbeeswarm)
p <- ggplot(mpg, aes(class, hwy))
p + geom_violin(width = 1.3) + geom_quasirandom(alpha = 0.2, width = 0.2)

enter image description here

Вариант 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)

enter image description here

0 голосов
/ 27 июня 2018

Пакет ggbeeswarm содержит квазислучайные числа геомов и пчелиный теплоту, которые делают именно то, что вы ищете: https://github.com/eclarke/ggbeeswarm

...