如何在ggplot中确定抖动?

时间:2015-04-25 02:01:55

标签: r ggplot2 data-visualization point jitter

我正在查看ggplot中的documentation抖动,同时制作一些图,我意识到我并不理解这个论点。

它声明参数是:

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?我是否有权假设这一部分分辨率?

1 个答案:

答案 0 :(得分:10)

如果我们查看source,我们首先会发现:

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是一个导出的功能(或者你可以只搜索它的来源here):

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&lt; -x + runif(n,-a,a)其中n < - 长度(x)   和a是金额参数(如果指定)。

     

设z < - max(x) - min(x)(假设通常情况)。金额a   添加的是以正参数量或其他方式提供的   从z计算,如下:

     

如果amount == 0,我们设置&lt; - factor * z / 50(与S相同)。

     

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