Возможно ли джиттер двух геомов ggplot таким же образом? - PullRequest
15 голосов
/ 02 июля 2010

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

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

Есть ли обходной путь для этого?Я думал, что уклонение от позиции может быть ответом, но, похоже, он не работает с такими графиками.В качестве альтернативы, может быть, есть какой-то способ получить вызов mean_cl_normal, чтобы также добавить строки? альтернативный текст http://img339.imageshack.us/img339/1807/screenshot20100702at943.png

Ответы [ 3 ]

9 голосов
/ 02 июля 2010

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

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))

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

7 голосов
/ 02 июля 2010

Это слабость в текущем синтаксисе 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))
1 голос
/ 13 сентября 2011

Я решил создать единый дистрибутив для решения этой проблемы.

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

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

data(airquality)
someDataset= airquality 
someDataset$color="black"
someDataset$color[someDataset$Month==8 & someDataset$Wind==9.7]="red"
## jitter gives different results each time it's run
for (fZoom in c(TRUE, FALSE)){
    if (fZoom) myAirQuality = someDataset[someDataset $Wind >7.5 & someDataset $Wind < 11.5,] 
    else myAirQuality = someDataset[someDataset $Wind >8.5 & someDataset $Wind < 10.5,]
    quartz("Using Jitter")
    plot(myAirQuality $Wind ~ jitter(myAirQuality $Month), col= myAirQuality$color)
    }

someDataset$MonthJit=runif(nrow(someDataset), min=-0.2, max=0.2)
for (fZoom in c(TRUE, FALSE)){
    if (fZoom) myAirQuality = someDataset[someDataset $Wind >7.5 & someDataset $Wind < 11.5,] 
    else myAirQuality = someDataset[someDataset $Wind >8.5 & someDataset $Wind < 10.5,]
    quartz("Using runif")
    plot(myAirQuality $Wind ~ c(myAirQuality $Month + myAirQuality $MonthJit), col= myAirQuality$color)
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...