2013-08-11 8 views
5

Ho letto un past post chiedendo informazioni sull'uso di scale_reverse e scale_log10 allo stesso tempo. Ho un problema simile, eccetto la mia scala che sto cercando di "invertire" è una scala predefinita nel pacchetto "scale". Qui è il mio codice:Come invertire l'ordine degli assi e utilizzare una scala predefinita in ggplot?

##Defining y-breaks for probability scale 
    ybreaks <- c(1,2,5,10,20,30,40,50,60,70,80,90,95,98,99)/100 

    #Random numbers, and their corresponding weibull probability valeus (which I'm trying to plot) 
    x <- c(.3637, .1145, .8387, .9521, .330, .375, .139, .662, .824, .899) 
    p <- c(.647, .941, .255, .059, .745, .549, .853, .451, .352, .157) 
    df <- data.frame(x, p) 

    require(scales) 
    require(ggplot2) 

    ggplot(df)+ 
     geom_point(aes(x=x, y=p, size=2))+ 
     stat_smooth(method="lm", se=FALSE, linetype="dashed", aes(x=x, y=p))+ 
     scale_x_continuous(trans='probit', 
          breaks=ybreaks, 
          minor_breaks=qnorm(ybreaks))+ 
     scale_y_log10() 

grafico risultante: Plot Per ulteriori informazioni, la scala che sto cercando di realizzare è la scala di probabilità di tracciato, che ha una risoluzione più fine su entrambe le estremità della scala (a 0 e 1) per mostrare eventi estremi, con risoluzione sempre decrescente verso il valore mediano (0,5).

Voglio essere in grado di utilizzare scale_x_reverse contemporaneamente alla mia scala di probabilità scale_x_continuous, ma non so come costruirlo in qualsiasi tipo di scala personalizzata. Qualche consiglio su questo?

risposta

0

Piuttosto che provare a combinare due trasformazioni, perché non trasformare i dati esistenti e quindi tracciarli? Quanto segue dovrebbe essere corretto.

#http://r.789695.n4.nabble.com/Inverse-Error-Function-td802691.html 
erf.inv <- function(x) qnorm((x + 1)/2)/sqrt(2) 
#http://en.wikipedia.org/wiki/Probit#Computation 
probit <- function(x) sqrt(2)*erf.inv((2*x)-1) 
# probit(0.3637) 
df$z <- probit(df$x) 
ggplot(df)+ 
    geom_point(aes(x=z, y=p), size=2)+ 
    stat_smooth(method="lm", se=FALSE, linetype="dashed", aes(x=z, y=p))+ 
    scale_x_reverse(breaks = ybreaks, 
        minor_breaks=qnorm(ybreaks))+ 
    scale_y_log10() 
0

Argomenti a scale_(x|y)_reverse() vengono passati al scale_(x|y)_continuous() così si dovrebbe fare semplicemente:

scale_x_reverse(trans='probit', breaks = ybreaks, minor_breaks=qnorm(ybreaks)) 
Problemi correlati