Подтвердить что ты не робот

Как определяется дрожание в ggplot?

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

В нем указано, что аргументы:

Width: degree of jitter in x direction. Defaults to 40% of the resolution of the data.и
height: degree of jitter in y direction. Defaults to 40% of the resolution of the data.

Мой вопрос: что такое разрешение и как оно определяется?

Кроме того, вы можете переопределить это и предоставить значение, как в примере ниже, где мы используем 0.1:

geom_point(position = position_jitter(w = 0.1, h = 0.1))

Какие единицы относятся к 0,1? Правильно ли я предполагаю, что эта доля разрешения?

4b9b3361

Ответ 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 значения.