Mat*_*ien 10 r data-visualization point ggplot2 jitter
在制作一些情节时,我正在查看关于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?我是否有权假设这一部分分辨率?
jor*_*ran 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)
}
})
Run Code Online (Sandbox Code Playgroud)
而你不知道它,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)))
}
Run Code Online (Sandbox Code Playgroud)
所以......你去!
在这种情况下,"分辨率"粗略地表示"矢量中任何两个元素之间的最小距离".
这个值(分辨率的40%)然后作为factor
参数传递给jitter
它,它有自己的小歌和舞:
结果,比如r,是r < - x + runif(n,-a,a),其中n < - length(x),a是amount参数(如果指定).
设z < - max(x) - min(x)(假设通常情况).要添加的金额a作为正参数金额提供或以其他方式从z计算,如下所示:
如果amount == 0,我们设置< - factor*z/50(与S相同).
如果amount为NULL(默认值),我们设置< - factor*d/5,其中d是相邻唯一(除了模糊)x值之间的最小差异.