2015-04-25 9 views
10

Stavo controllando il jitter in ggplot mentre eseguivo alcune trame, e mi sono reso conto che non capivo davvero l'argomento.Come viene determinato il jitter in ggplot?

afferma che gli argomenti sono:

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

La mia domanda è, che cosa è esattamente la risoluzione, e come viene determinata?

Inoltre, è possibile ignorare questo e fornire un valore, come nell'esempio seguente in cui usiamo 0.1:

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

Quali unità appartenere a 0,1? Ho ragione di ritenere che questa sia una parte della risoluzione?

risposta

10

Se guardiamo il source abbiamo prima troviamo questo:

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) 
    } 

}) 

E non lo sai, resolution è una funzione esportata (o si può solo cercare le fonti per esso si atterraggio 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))) 
} 

Quindi ... ecco!

"risoluzione" in questo contesto significa quindi "la più piccola distanza tra due elementi in un vettore".

Questo valore (il 40% della risoluzione) viene poi trasferito come factor argomento jitter, che ha il proprio piccolo canto e danza:

Il risultato, diciamo r, è r < - x + runif (n, -a, a) dove n < - length (x) e a è l'argomento amount (se specificato).

Lasciate z < - max (x) - min (x) (assumendo il caso normale). La quantità di essere un aggiungere viene sia fornito come quantità argomento positivo o altrimenti calcolata da z, come segue:

Se quantità == 0, abbiamo stabilito un < - fattore z */50 (uguale a S).

Se il valore è NULL (default), abbiamo fissato un < - fattore * d/5 dove d è la più piccola differenza tra adiacenti unico (a parte fuzz) x valori.

Problemi correlati