Ответ 1
Если мы посмотрим на источник мы сначала найдем это:
PositionJitter <- proto(Position, {
objname <- "jitter"
adjust <- function(., data) {
if (empty(data)) return(data.frame())
check_required_aesthetics(c("x", "y"), names(data), "position_jitter")
if (is.null(.$width)) .$width <- resolution(data$x, zero = FALSE) * 0.4
if (is.null(.$height)) .$height <- resolution(data$y, zero = FALSE) * 0.4
trans_x <- NULL
trans_y <- NULL
if(.$width > 0) {
trans_x <- function(x) jitter(x, amount = .$width)
}
if(.$height > 0) {
trans_y <- function(x) jitter(x, amount = .$height)
}
transform_position(data, trans_x, trans_y)
}
})
И разве вы этого не знаете, resolution
- это экспортированная функция (или вы можете просто искать источники для ее посадки здесь):
function (x, zero = TRUE)
{
if (is.integer(x) || zero_range(range(x, na.rm = TRUE)))
return(1)
x <- unique(as.numeric(x))
if (zero) {
x <- unique(c(0, x))
}
min(diff(sort(x)))
}
Итак... ты идешь!
"разрешение" в этом контексте, то грубо означает "наименьшее расстояние между любыми двумя элементами в векторе".
Это значение (40% разрешения) затем передается как аргумент factor
в jitter
, у которого есть своя песня и танец:
Результат, скажем r, равен r < - x + runif (n, -a, a), где n < длина (x) и a - аргумент количества (если указано).
Пусть z = max (x) - min (x) (при условии обычного случая). Сумма a должна быть добавлено либо предоставляется как положительная сумма аргумента, либо иным образом вычисленный из z, следующим образом:
Если количество == 0, мы устанавливаем < -фактор * z/50 (тот же, что и S).
Если сумма равна NULL (по умолчанию), мы устанавливаем коэффициент < - factor * d/5, где d - наименьшая разница между соседними уникальными (кроме пуха) x значения.