Действительно ли возможно дрожать два ggplot геона таким же образом?

Используя position_jitter создает случайное дрожание для предотвращения сверхграфического изображения точек данных.

В ниже я использовал пример бейсбольной статистики для иллюстрирования моей проблемы. Когда я отображаю те же данные на графике с двумя слоями, тот же вызов дрожания дрожит геоны немного по-другому. Это имеет смысл, потому что он, по-видимому, генерирует случайное дрожание независимо в двух вызовах, но приводит к проблеме, которую Вы видите в моем графике ниже.

p=ggplot(baseball,aes(x=round(year,-1),y=sb,color=factor(lg))) 
p=p+stat_summary(fun.data="mean_cl_normal",position=position_jitter(width=3,height=0))+coord_cartesian(ylim=c(0,40))
p+stat_summary(fun.y=mean,geom="line",position=position_jitter(width=3,height=0))

Хотя точки значения погрешности и строка относятся к тем же данным, они разделяются — строки и точки не соединяются.

Существует ли обходное решение для этого? Я думал, что уловка положения могла бы быть ответом, но это, кажется, не работает с этими видами графиков. С другой стороны, возможно, существует некоторый способ заставить вызов mean_cl_normal также добавлять строки? alt text

16
задан Glorfindel 31 July 2019 в 19:06
поделиться

2 ответа

Это слабое место в текущем синтаксисе ggplot2 - нет никакого способа обойти его, кроме как добавить джиттер самостоятельно.

Или вы можете сделать что-то вроде этого:

ggplot(baseball, aes(round(year,-1) + as.numeric(factor(lg)), sb, color = factor(lg))) +
  stat_summary(fun.data="mean_cl_normal") +
  stat_summary(fun.y=mean,geom="line") +
  coord_cartesian(ylim=c(0,40))
7
ответ дан 30 November 2019 в 22:37
поделиться

Я так думаю, установив одно и то же начальное число в двух экземплярах:

p=ggplot(baseball,aes(x=round(year,-1),y=sb,color=factor(lg)))
myseed = 2010
set.seed(myseed)
p=p+stat_summary(fun.data="mean_cl_normal",
  position=position_jitter(width=3,height=0))+coord_cartesian(ylim=c(0,40))
set.seed(myseed)
p+stat_summary(fun.y=mean,geom="line",
           position=position_jitter(width=3,height=0))

Это гарантирует, что генератор случайных чисел отправляется обратно в ту же начальную позицию, которая использовалась при первоначальном вызове. Однако я не знаю, как вы можете извлечь случайные приращения, добавленные к значениям.

9
ответ дан 30 November 2019 в 22:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: