2016-07-12 24 views
2

Ich versuche, eine benutzerdefinierte Skala/AchsTransformation zu verwenden, etwa so:GGplot benutzerdefinierte Skala Transformation mit benutzerdefinierten Zecken

library(ggplot2) 
library(scales) 

dat <- data.frame(
    time.tot = c(407.17, 168.83, 127.8, 108.88, 69.04, 68.5, 59.76, 407.17, 
       168.83, 127.8, 108.88, 69.04, 68.5, 59.76, 407.17, 168.83, 127.8, 
       108.88, 69.04, 68.5, 59.76), 
    error = c(0, 0.01, 0.05, 0.1, 0.5, 0.7, 1, 1.91e-06, 0.00229, 0.00884, 
      0.0172, 0.128, 0.128, 0.22, 1.43e-08, 0.000337, 0.00121, 0.00221, 
      0.0123, 0.0123, 0.0213, 0, 0.01, 0.05, 0.1, 0.5, 0.7, 1, 1.91e-06, 
      0.00229, 0.00884, 0.0172, 0.128, 0.128, 0.22, 1.43e-08, 0.000337, 
      0.00121, 0.00221, 0.0123, 0.0123, 0.0213), 
    type = rep(c("A", "B", "C"), each=7)) 

eps <- 1e-8 
tn <- trans_new("logpeps", 
       function(x) log(x+eps), 
       function(y) exp(y)-eps, 
       domain=c(0, Inf), 
       breaks=c(0, 0.1, 1)) 

ggplot(dat, aes(x=time.tot, y=error, color=type)) + 
    geom_line() + geom_point() + coord_trans(y = tn) 

enter image description here

Wie Sie sehen können, die y-Achse in der Tat verwandelt durch meine angegebene Funktion, y=log(x+eps). Das Argument breaks hat jedoch keinen Effekt. Ich bin mir sicher, dass ich es falsch spezifiziere, aber ich bin nicht in der Lage, aus der Dokumentation herauszufinden, wie es funktioniert. Irgendwelche Vorschläge?

Ich frage mich auch, wie/ob die kurvigen Linien zu "reparieren" - sieht aus wie sie im Originalmaßstab gezeichnet werden und dann mit meiner benutzerdefinierten tn danach umgewandelt werden.

ggplot(dat, aes(x=time.tot, y=error, color=type)) + 
    geom_line() + geom_point() + coord_trans(y = tn) 
    + scale_y_continuous(breaks = c(0,0.1,1)) 

Auch die nicht-geraden Linien sind das erwartete Verhalten von coord_trans: direkt

Antwort

3

Möglicherweise müssen Sie die Skala auf der y-Achse. aus der hilfe: "coord_trans ist anders als maßstabsumwandlungen, da es nach statistischer transformation auftritt und die visuelle erscheinung von geomen beeinflusst - es gibt keine garantie dafür, dass gerade linien weiterhin gerade sind."

Stattdessen versuchen:

b <- 10^-c(Inf, 8:0) 
ggplot(dat, aes(x=time.tot, y=error, color=type)) + 
    geom_line() + geom_point() + scale_y_continuous(breaks = b, labels=b, trans = tn) 

enter image description here

+0

Perfect, danke! Ich füge Ihrer Antwort eine Bearbeitung hinzu, um die Handlung zu zeigen, mit der ich gelandet bin. –