12

在制作一些情节时,我正在查看有关 ggplot 中 jitter 的文档,我意识到我并不真正理解这个论点。

它指出论点是:

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?我是否正确地假设这是决议的一部分?

4

1 回答 1

10

如果我们查看源代码,我们首先会发现:

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 <- length(x) 并且 a 是数量参数(如果指定)。

让 z <- max(x) - min(x) (假设通常情况)。要添加的量 a 要么作为正参数量提供,要么以其他方式从 z 计算,如下所示:

如果数量 == 0,我们设置 <- 因子 * z/50(与 S 相同)。

如果数量为 NULL(默认),我们设置一个 <- 因子 * d/5,其中 d 是相邻唯一(除了模糊)x 值之间的最小差异。

于 2015-04-25T02:26:44.140 回答