Я решил создать единый дистрибутив для решения этой проблемы.
Мне пришлось сегодня решить ту же самую проблему.Я создаю один график с дрожанием точек, а затем создаю второй график, который по существу увеличивает подсекцию первого.Это диссонирует и отвлекает, если точки перемещаются.
Ниже приведена демонстрация проблемы и мое решение.Я не использую 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)
}