在 ggplot 中如何确定抖动?

12
我在制作一些图表时,查看了 ggplot 中的 jitter 文档(注:jitter 是指数据点的抖动效果),发现我不太理解该参数。文档中指出,参数如下: Width: x 方向上的抖动程度。默认值为数据分辨率的 40%。 height: y 方向上的抖动程度。默认值为数据分辨率的 40%。 那么我的问题是,什么是分辨率,它是如何确定的?
此外,你可以覆盖默认值并提供一个数值,就像下面的例子中我们使用了 0.1: geom_point(position = position_jitter(w = 0.1, h = 0.1)) 这里的 0.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)))
}

所以......就是这样!

在这个上下文中,“resolution”大致意思是“向量中任意两个元素之间的最小距离”。

然后将该值(分辨率的40%)作为factor参数传递给jitter,它有自己的小技巧:

结果是r < - x + runif(n,-a,a),其中n < - length(x), a是数量参数(如果指定的话)。

令z < - max(x)- min(x)(假设通常情况下),要添加的量a是 要么作为正参数量提供,否则通过以下方式计算:

如果amount == 0,则我们设置a < - factor * z / 50(与S相同)。

如果amount为NULL(默认值),则我们将a < - factor * d / 5,其中d是相邻唯一的(除了模糊)x值之间的最小差异。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接